home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / msdos / raytrace / pov / gen / bstone / borlandc / bstone_y.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-20  |  70.0 KB  |  1,993 lines

  1. #ifndef lint
  2. static char yysccsid[] = "@(#)yaccpar     1.7 (Berkeley) 09/09/90";
  3. #endif
  4. #define YYBYACC 1
  5. #define YYDEBUG 0
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <math.h>
  9. #include <alloc.h>
  10. #include <string.h>
  11. #include "t_cio.h"
  12. #include "vector.h"
  13. #include "t_lex.h"
  14. #include "bstone_m.h"
  15. LEX *lex;
  16. FILE *errlogz=stderr;
  17. FILE *pvp=stdout;
  18. int ybdebug=0;
  19. int load_flag=0;
  20. int fkt_id;
  21. POV_OBJ **obj_all;
  22. static int i,id1,id2,k;
  23. static DIM_H dm;
  24. static long n;
  25. static T_NODE *tn;
  26. static FT_LOOP *ft;
  27. static double dd;
  28. static double *dp;
  29. static POV_OBJ pv_obj;
  30. static char pv_line[LSIZE];
  31. static int n_obj;
  32. static POV_OBJ *obj_lst[BSIZE];
  33. static POV_OBJ *pv;
  34. static VECTOR v;
  35. static char *ys;
  36.  
  37. typedef union { double s; double v[3]; T_NODE *t; POV_OBJ *p; } YYSTYPE;
  38. #define Y_VAL 257
  39. #define Y_VEC 258
  40. #define Y_ABS 259
  41. #define Y_STR 260
  42. #define Y_END 261
  43. #define Y_REM 262
  44. #define Y_GOTO 263
  45. #define Y_TRACE 264
  46. #define Y_LET 265
  47. #define Y_PRINT 266
  48. #define Y_LIST 267
  49. #define Y_OBJ 268
  50. #define Y_V0 269
  51. #define Y_VX 270
  52. #define Y_VY 271
  53. #define Y_VZ 272
  54. #define Y_LOAD 273
  55. #define Y_SAVE 274
  56. #define Y_IF 275
  57. #define Y_THEN 276
  58. #define Y_CONT 277
  59. #define Y_STOP 278
  60. #define Y_GOSUB 279
  61. #define Y_RETURN 280
  62. #define Y_DELETE 281
  63. #define Y_NUM 282
  64. #define Y_DIM 283
  65. #define Y_FOR 284
  66. #define Y_TO 285
  67. #define Y_STEP 286
  68. #define Y_NEXT 287
  69. #define Y_NEW 288
  70. #define Y_RUN 289
  71. #define Y_FKT 290
  72. #define Y_RND 291
  73. #define Y_FOPEN 292
  74. #define Y_FPRINT 293
  75. #define Y_PLANE 294
  76. #define Y_BIT 295
  77. #define Y_BOUND 296
  78. #define Y_TEX 297
  79. #define Y_TRANSFORM 298
  80. #define YYERRCODE 256
  81. short yylhs[] = {                                        -1,
  82.    16,    0,   15,   15,   15,   15,   15,   17,   15,   15,
  83.    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
  84.    15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
  85.    15,   15,   15,   15,   15,   15,   15,   15,    7,    7,
  86.    18,   18,   18,   18,   18,   18,   18,   18,   20,   20,
  87.    23,   23,   23,   23,   21,   21,   24,   24,   24,   24,
  88.    22,   22,   22,   26,   19,   25,   25,   27,   30,   28,
  89.    29,   29,   31,    1,    8,    2,    2,    2,    3,    3,
  90.     3,    3,    3,    3,    3,    3,    3,    4,    4,    4,
  91.     5,    5,    5,    5,    5,    6,    6,    6,    6,    6,
  92.     6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
  93.    13,   13,    9,    9,    9,   10,   10,   10,   11,   11,
  94.    11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
  95.    11,   11,   11,   11,   11,   12,   12,   14,   14,   14,
  96.    14,   14,   14,   14,   14,
  97. };
  98. short yylen[] = {                                         2,
  99.     0,    2,    0,    1,    1,    1,    1,    0,    5,    4,
  100.     2,    1,    2,    2,    1,    7,    2,    2,    1,    2,
  101.     1,    3,    3,    4,    2,    2,    2,    2,    3,    3,
  102.     1,    2,    2,    2,    2,    3,    3,    2,    0,    2,
  103.     3,    5,    3,    3,    3,    3,    4,    4,    1,    3,
  104.     1,    1,    1,    1,    1,    3,    1,    1,    1,    1,
  105.     0,    1,    3,    0,    2,    1,    2,    3,    0,    4,
  106.     1,    3,    1,    1,    1,    1,    4,    4,    1,    3,
  107.     4,    3,    3,    3,    4,    4,    4,    1,    3,    3,
  108.     1,    3,    3,    3,    3,    2,    2,    2,    3,    4,
  109.     4,    1,    1,    4,    4,    4,    4,    4,    6,    3,
  110.     1,    2,    1,    3,    3,    1,    3,    3,    3,    7,
  111.     1,    2,    2,    4,    1,    1,    1,    1,    4,    4,
  112.     4,    4,    6,   11,   10,    1,    2,    1,    2,    2,
  113.     6,    8,    6,    7,    4,
  114. };
  115. short yydefred[] = {                                      1,
  116.     0,    0,    0,    0,    4,    7,    0,    0,    0,    0,
  117.     0,    0,    0,    0,    0,    6,    5,    0,   15,    0,
  118.     0,    0,    0,   19,    0,    0,    0,    0,    0,    0,
  119.     0,    0,    2,   21,  112,    0,  137,   11,    0,    0,
  120.     0,    0,    0,  103,    0,    0,    0,    0,    0,    0,
  121.     0,    0,    0,   18,    0,    0,    0,    0,   91,    0,
  122.     0,  116,  121,  102,    0,   20,   51,   54,   52,   53,
  123.     0,   25,    0,    0,   27,    0,   28,    0,    0,    0,
  124.    14,   34,   35,    0,    0,   33,   64,   64,    0,    0,
  125.    17,   13,   32,   57,   60,   58,   59,   26,    0,   64,
  126.     0,    0,    0,    0,    0,   65,    0,    0,    0,    0,
  127.     0,    0,    0,    0,   64,    0,    0,    0,    0,    0,
  128.     0,    0,    0,    0,    0,    0,    0,   97,   96,  122,
  129.    98,  123,    0,    0,    0,    0,    0,    0,    0,    0,
  130.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  131.     0,    0,    0,    0,   44,  138,    0,    0,    0,    0,
  132.     0,   46,    0,   45,   30,   29,    0,    8,   37,   36,
  133.    22,   23,   64,    0,    0,    0,    0,    0,   43,   41,
  134.     0,   67,    0,    0,    0,    0,    0,    0,    0,    0,
  135.     0,    0,    0,    0,    0,  110,    0,    0,    0,    0,
  136.     0,    0,    0,    0,   99,  119,    0,    0,    0,    0,
  137.     0,    0,    0,    0,    0,    0,   92,  117,   94,   95,
  138.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  139.     0,    0,   93,  118,   50,   63,    0,    0,    0,  140,
  140.   139,   10,    0,   24,    0,   56,    0,    0,   48,   47,
  141.    68,  100,  101,  129,  130,  105,  131,  106,  132,  107,
  142.     0,  108,    0,  104,  124,    0,    0,    0,    0,    0,
  143.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  144.     0,    0,    0,    0,    9,    0,   42,    0,    0,    0,
  145.     0,    0,    0,    0,    0,    0,  145,    0,    0,    0,
  146.   109,  133,    0,    0,    0,    0,    0,    0,    0,    0,
  147.    16,    0,    0,  120,  143,   73,   70,    0,    0,    0,
  148.   141,   40,    0,    0,    0,  144,    0,    0,    0,   72,
  149.   142,  135,    0,  134,
  150. };
  151. short yydgoto[] = {                                       1,
  152.    74,   55,   56,   57,   58,   59,  311,   70,   60,   61,
  153.    62,   63,   64,  164,   33,    2,  243,   34,   35,   72,
  154.    98,   75,   73,   99,  106,   36,  107,  282,  317,  307,
  155.   318,
  156. };
  157. short yysindex[] = {                                      0,
  158.     0, 1659,    0,    0,    0,    0, -264, 1611,  171, 1230,
  159.  1611,   -7, -211, 1291, 1611,    0,    0, -217,    0, 1188,
  160.  -226, -187, -176,    0, 1611, -172, 1274, -165, -159, -149,
  161.    70,   74,    0,    0,    0,   55,    0,    0,  113,  128,
  162.   149,  170,  196,    0,  200,  201,  -63,   44, 1611, 1428,
  163.  1611, 1611, 1611,    0,  -29,   72,  168,  250,    0,  173,
  164.     5,    0,    0,    0,  -20,    0,    0,    0,    0,    0,
  165.   173,    0,  205,  211,    0, 1144,    0,    3,    7, -189,
  166.     0,    0,    0,   -9,    8,    0,    0,    0,   16,  219,
  167.     0,    0,    0,    0,    0,    0,    0,    0,  240,    0,
  168.   227,  229, 1611, 1611, 1611,    0,   55, 1611,   26, 1326,
  169.  1391, 1463, 1611, 1611,    0, 1611,  256,  328,    5,  277,
  170.   281,  291,  301,  302, 1428, 1428, 1611,    0,    0,    0,
  171.     0,    0,  -34,  154,  306,  224, 1611, 1507, 1559,  296,
  172.  1611, 1611, 1611, 1428, 1428, 1611,  300, 1611, 1611,  -26,
  173.   -26,  227, 1230, 1611,    0,    0,   56,  312,   86,   87,
  174.   250,    0,  234,    0,    0,    0,   82,    0,    0,    0,
  175.     0,    0,    0, 1611, 1274,  307, -130, -130,    0,    0,
  176.   -30,    0,  -12,  176,  326,  334,  185,  335,  217,  338,
  177.   263,  -17,  139,   -8,  190,    0,  358, 1611, 1611, 1611,
  178.  1611, 1611, 1611, 1611,    0,    0, 1611, 1611,  168, 1611,
  179.   168, 1611,  168, 1611,  250,  250,    0,    0,    0,    0,
  180.   234, 1611,    5,    5,  341,  342,  344,  346,  349,  -26,
  181.   -26, 1611,    0,    0,    0,    0, 1594,  356, 1611,    0,
  182.     0,    0, 1659,    0,  122,    0, 1611,  163,    0,    0,
  183.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  184.  1611,    0, 1611,    0,    0, 1611,  361,  393,   72,   72,
  185.   168,  168,  168,  234,  130,  140,  146, 1611, 1611,  266,
  186.   375,  385,  162,  388,    0, 1611,    0,  166,   30,  271,
  187.   401, 1611, 1611,  426,  293, 1611,    0,  403, 1611,  169,
  188.     0,    0, 1611,  436,   -1,  407,  184, 1611,  -16, 1611,
  189.     0,  453, 1611,    0,    0,    0,    0,  412,  421, 1611,
  190.     0,    0, 1611,  456,  184,    0,  423,  294, 1611,    0,
  191.     0,    0,  308,    0,
  192. };
  193. short yyrindex[] = {                                      0,
  194.     0,  465,  114,   80,    0,    0,    0,    0,    0,    0,
  195.   472,    0,    0,  215,    0,    0,    0,    0,    0,  472,
  196.     0,    0,    0,    0,  482,  484,    0,    0,    0,    0,
  197.     0,    0,    0,    0,    0,    0,    0,    0,    0,   15,
  198.   450,  490,  524,    0,    0,    0,    0,    0,    0,    0,
  199.     0,    0,    0,    0,   39,  699,  822,  558,    0,    0,
  200.   645,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  201.    11,    0,  486,    1,    0,    0,    0,    0,    0,    0,
  202.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  203.     0,    0,    0,    0,    0,    0,    0,    0,  487,    0,
  204.   489,    0,    0,    0,    0,    0,  285,    0,    0,    0,
  205.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  206.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  207.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  208.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  209.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  210.     0,    0,   41,    0,    0,    0,    0,    0,    0,    0,
  211.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  212.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  213.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  214.     0,    0,    0,    0,    0,    0,    0,    0,  826,    0,
  215.   856,    0,  895,    0,  684,  718,    0,    0,    0,    0,
  216.   964,    0,  752,  786,  350,  380,  416,    0,    0,    0,
  217.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  218.     0,    0,  465,    0,    0,    0,    0,    0,    0,    0,
  219.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  220.     0,    0,    0,    0,    0,    0,    0,    0,  927, 1040,
  221.   998, 1032, 1077, 1113,    0,    0,    0,    0,    0,    0,
  222.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  223.     0,    0,    0,    0,    0,  235,    0,    0,    0,  502,
  224.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  225.     0,    0,    0,    0,    0,    0,    0,  464,    0,    0,
  226.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  227.     0,    0,    0,    0,
  228. };
  229. short yygindex[] = {                                      0,
  230.    -5,  -41,  -22,   40, 1696,  -15,    0,  -25,  -10,  221,
  231.    -6,    4,   14,   24,  264,    0,    0,  497,   93,  355,
  232.   340,  106,    0,    0,  406,    0,    0,    0,  191,    0,
  233.     0,
  234. };
  235. #define YYTABLESIZE 2025
  236. short yytable[] = {                                      71,
  237.    62,   97,   54,  135,   69,   31,  205,  135,  135,   80,
  238.    75,  133,   31,  232,  125,   32,   71,   38,  230,   92,
  239.   135,   96,   32,  262,  321,  135,  261,  320,  252,  135,
  240.    87,   88,  264,   49,  128,  129,  131,  231,   74,  151,
  241.    75,  141,  134,  142,  130,  132,  150,  125,   77,  125,
  242.   162,  125,  125,   76,   75,  125,  125,  125,  125,  125,
  243.   314,  125,  251,  181,   81,  163,  183,  135,   89,   90,
  244.   301,  192,  194,  167,  125,  125,  125,  179,  117,  136,
  245.    91,   75,   74,  116,   75,  133,  168,   93,  118,  136,
  246.   238,  100,  163,  136,  136,  237,   37,  184,  180,  187,
  247.   189,  191,  193,  195,  140,  197,  136,  125,  101,  129,
  248.   131,  136,  136,  111,  136,  136,  136,  136,  102,   79,
  249.   136,  136,  136,  136,  136,   86,  136,  217,  219,  220,
  250.   103,  138,  137,  139,  104,  221,  218,  156,  125,  136,
  251.   136,  136,   71,  233,  234,  105,  111,   69,  236,   97,
  252.   111,  111,  108,  136,  111,  111,  111,  111,  111,  248,
  253.   111,  192,  194,  158,   71,  159,  160,  109,  245,   96,
  254.    64,  147,  136,  111,  111,  111,  209,  211,  213,  171,
  255.   172,  148,  263,  149,  269,  270,  147,  267,  110,  187,
  256.   189,  191,  176,  115,  206,  192,  148,  238,  149,  146,
  257.   249,  250,  288,  136,   64,  147,  111,  196,  147,  111,
  258.   141,  274,  142,  284,  146,  148,  253,  149,  148,  289,
  259.   149,  280,  147,  130,  132,  256,  193,  148,  163,  149,
  260.   265,    4,  148,  146,  149,  112,  146,  111,  268,  113,
  261.   114,  287,   40,  225,  226,  227,   31,  152,  153,  271,
  262.   146,  272,  290,  273,  154,  291,   32,  258,  169,  148,
  263.    62,  149,  165,  228,  229,  244,  166,  294,  295,  119,
  264.   306,   48,  173,  309,  125,  170,  148,  125,  149,  174,
  265.   300,  304,  319,  175,   66,  163,  145,  177,  163,  178,
  266.   125,  143,  312,  185,  327,  198,  144,  163,   74,  125,
  267.   125,   74,  324,  260,  322,  148,  206,  149,  148,  163,
  268.   149,  302,  328,  148,   74,  149,  200,   66,  333,   66,
  269.   201,   66,   66,   74,   74,   66,   66,   66,   66,   66,
  270.   202,   66,  305,  265,  332,  148,  148,  149,  149,  136,
  271.   203,  204,  136,  207,   66,   66,   66,  208,  334,  126,
  272.   148,  239,  149,  240,  241,  136,  214,  119,  119,  119,
  273.   222,  119,  119,  242,  136,  136,  254,  247,  223,  224,
  274.   141,  199,  142,  111,  255,  257,  111,   66,  259,  127,
  275.   275,  276,  126,  277,  126,  278,  126,  126,  279,  111,
  276.   126,  126,  126,  126,  126,  283,  126,  186,  111,  111,
  277.   148,  266,  149,  148,  292,  149,  286,  188,   66,  126,
  278.   126,  126,  127,  190,  127,  128,  127,  127,  296,  119,
  279.   127,  127,  127,  127,  127,  297,  127,    3,    4,  298,
  280.   119,  299,  119,  281,  119,  141,  293,  142,   12,  127,
  281.   127,  127,  126,  148,  303,  149,  308,  315,  128,  126,
  282.   128,  316,  128,  128,  310,  325,  128,  128,  128,  128,
  283.   128,  326,  128,  331,    3,   28,   65,   30,  148,  263,
  284.   149,   61,  127,  126,   61,  128,  128,  128,  148,  313,
  285.   149,   12,  126,   31,  126,   49,   55,  126,   38,  127,
  286.   126,  126,  126,  126,  126,  148,  323,  149,  148,  329,
  287.   149,   39,   69,  127,   71,   66,  285,  235,  128,  126,
  288.   126,  126,  182,  119,  246,  330,    0,    0,    0,    0,
  289.     0,    0,  127,  128,  127,    0,    0,  127,    0,    0,
  290.   127,  127,  127,  127,  127,    0,    0,    0,    0,  128,
  291.     0,    0,  126,    0,   66,    0,    0,   66,    0,  127,
  292.   127,  127,    0,    0,    0,    0,  128,   88,  128,    0,
  293.    66,  128,    0,    0,  128,  128,  128,  128,  128,   66,
  294.    66,    0,    0,  126,    0,    0,    0,    0,    0,    0,
  295.     0,    0,  127,  128,  128,  128,    0,    0,    0,    0,
  296.    88,    0,    0,    0,    0,   88,    0,    0,   88,    0,
  297.    88,   88,   88,    0,    0,    0,    0,    0,    0,  126,
  298.     0,    0,  126,  127,    0,    0,  128,   88,   88,   88,
  299.     0,    0,    0,    0,    0,  126,    0,    0,    0,    0,
  300.     0,    0,    0,    0,  126,  126,    0,    0,    0,  127,
  301.     0,    0,  127,    0,  113,    0,    0,  128,    0,    0,
  302.    88,    0,    0,    0,    0,  127,    0,    0,    0,    0,
  303.     0,    0,    0,    0,  127,  127,    0,    0,    0,    0,
  304.     0,    0,    0,    0,    0,  128,    0,  113,  128,    0,
  305.     0,   88,  113,   89,    0,  113,    0,  113,  113,  113,
  306.     0,  128,    0,    0,    0,    0,    0,    0,   76,    0,
  307.   128,  128,    0,    0,  113,  113,  113,    0,    0,  126,
  308.     0,    0,  126,    0,    0,    0,   89,   90,    0,    0,
  309.     0,   89,    0,    0,   89,  126,   89,   89,   89,    0,
  310.     0,    0,    0,    0,  126,  126,   76,  113,    0,   76,
  311.     0,    0,   76,   89,   89,   89,    0,    0,    0,  127,
  312.    90,  114,  127,    0,    0,   90,    0,    0,   90,    0,
  313.    90,   90,   90,    0,    0,  127,    0,    0,  113,    0,
  314.     0,    0,    0,    0,  127,  127,   89,   90,   90,   90,
  315.     0,    0,    0,  128,  114,  115,  128,    0,    0,  114,
  316.     0,   76,  114,    0,  114,  114,  114,    0,    0,  128,
  317.     0,    0,    0,    0,    0,    0,    0,   89,  128,  128,
  318.    90,  114,  114,  114,    0,    0,    0,   88,  115,    0,
  319.    88,   79,   76,  115,    0,   82,  115,    0,  115,  115,
  320.   115,    0,    0,   88,    0,    0,    0,    0,    0,    0,
  321.     0,   90,   88,   88,  114,  115,  115,  115,    0,    0,
  322.     0,    0,    0,    0,   79,   80,    0,    0,   82,   79,
  323.     0,    0,   79,   82,    0,   79,   82,    0,    0,   82,
  324.     0,    0,    0,    0,    0,  114,    0,    0,  115,    0,
  325.     0,   79,   79,   79,    0,   82,   82,   82,   80,    0,
  326.     0,    0,    0,   80,   84,    0,   80,    0,    0,   80,
  327.     0,    0,    0,    0,  113,    0,    0,  113,    0,  115,
  328.     0,    0,    0,    0,   79,   80,   80,   80,   82,    0,
  329.   113,    0,    0,    0,    0,    0,   77,   84,    0,  113,
  330.   113,    0,   84,    0,    0,   84,    0,    0,   84,    0,
  331.     0,    0,    0,   89,    0,   79,   89,    0,   80,   82,
  332.     0,    0,    0,    0,   84,   84,   84,    0,   76,   89,
  333.     0,   76,    0,   83,   77,    0,    0,   77,   89,   89,
  334.    77,    0,    0,    0,   76,    0,    0,   90,    0,   80,
  335.    90,    0,    0,   76,   76,    0,    0,   84,    0,    0,
  336.     0,    0,    0,   90,    0,    0,   83,   81,    0,    0,
  337.     0,   83,   90,   90,   83,    0,    0,   83,    0,    0,
  338.     0,  114,    0,    0,  114,    0,    0,    0,   84,   77,
  339.     0,    0,    0,   83,   83,   83,    0,  114,    0,    0,
  340.    81,   85,    0,    0,    0,   81,  114,  114,   81,   78,
  341.     0,   81,    0,    0,    0,  115,    0,    0,  115,    0,
  342.    77,    0,    0,    0,    0,    0,   83,   81,   81,   81,
  343.     0,  115,    0,    0,   85,    0,    0,    0,    0,   85,
  344.   115,  115,   85,    0,    0,   85,   86,   78,    0,    0,
  345.    78,   79,    0,   78,   79,   82,    0,   83,   82,    0,
  346.    81,   85,   85,   85,    0,    0,    0,   79,    0,    0,
  347.     0,   82,    0,    0,    0,    0,   79,   79,    0,   86,
  348.    82,   82,   87,    0,   86,   80,    0,   86,   80,    0,
  349.    86,   81,    0,    0,   85,    0,    0,    0,    0,    0,
  350.     0,   80,   78,    0,    0,    0,   86,   86,   86,    0,
  351.    80,   80,    0,    0,    0,   87,    0,    0,    0,    0,
  352.    87,    0,    0,   87,   84,   85,   87,   84,    0,    0,
  353.     0,    0,    0,   78,    0,    0,    0,    0,    0,   86,
  354.    84,    0,   87,   87,   87,    0,   50,    0,    0,   84,
  355.    84,    0,    0,   53,    0,    0,   77,    0,   51,   77,
  356.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  357.    86,    0,   77,   49,    0,   87,    0,   52,    0,    0,
  358.     0,   77,   77,    0,    0,    0,    0,    0,    0,    0,
  359.    50,    0,    0,   83,    0,    0,   83,   53,    0,    0,
  360.     0,    0,   51,    0,    0,    0,   87,    0,    0,   83,
  361.     0,    0,    0,    0,    0,    0,    0,   49,   83,   83,
  362.     0,   52,    0,    0,    0,    0,    0,   81,    0,    0,
  363.    81,    0,   50,    0,    0,    0,    0,    0,    0,   53,
  364.     0,    0,    0,   81,   51,    0,    0,    0,    0,    0,
  365.     0,    0,   81,   81,    0,    0,    0,    0,    0,   49,
  366.     0,   85,    0,   52,   85,    0,    0,    0,    0,   78,
  367.     0,    0,   78,    0,    0,    0,   50,   85,    0,    0,
  368.     0,    0,    0,   53,    0,   78,   85,   85,   51,    0,
  369.     0,    0,    0,   50,   78,   78,    0,    0,    0,    0,
  370.    53,    0,    0,   49,    0,   51,   86,   52,    0,   86,
  371.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  372.    49,    0,   86,    0,   52,    0,    0,    0,   50,    0,
  373.     0,   86,   86,    0,    0,   53,    0,    0,    0,    0,
  374.    51,    0,   87,    0,    0,   87,    0,    0,    0,    0,
  375.     0,    0,    0,    0,    0,   49,    0,    0,   87,   52,
  376.     0,    0,    0,    0,    0,    0,    0,   87,   87,    0,
  377.     3,    4,   39,  155,    0,    0,    0,    0,    0,    0,
  378.     0,  156,   40,   41,   42,   43,    0,    0,    0,    0,
  379.     0,    0,    0,   50,    0,   44,    0,    0,    0,    0,
  380.    53,    0,    0,  157,   46,   51,    0,  158,   47,  159,
  381.   160,   48,    0,    0,    3,    4,   39,   82,    0,    0,
  382.    49,    0,    0,    0,   52,   83,   40,   41,   42,   43,
  383.    50,    0,    0,    0,    0,    0,    0,  127,    0,   44,
  384.     0,    0,  125,    0,    0,    0,    0,   45,   46,    0,
  385.     0,    0,   47,   84,   85,   48,    3,    4,   39,   67,
  386.     0,  126,    0,    0,    0,   50,    0,   68,   40,   41,
  387.    42,   43,   53,    0,    0,    0,    0,   51,    0,    0,
  388.     0,   44,    0,    0,    0,    0,    0,    0,    0,   45,
  389.    46,    0,   49,    0,   47,    0,   52,   48,    0,    0,
  390.     3,    4,   39,   94,    0,    0,    0,    0,    0,   50,
  391.     0,   95,   40,   41,   42,   43,   53,    3,    4,   39,
  392.     0,   51,    0,    0,   78,   44,    0,    0,    0,   40,
  393.    41,   42,   43,   45,   46,    0,   49,  210,   47,    0,
  394.    52,   48,   44,    0,    0,    0,    0,    0,    0,    0,
  395.    45,   46,    3,    4,   39,   47,    0,    0,   48,    0,
  396.     0,   50,    0,  186,   40,   41,   42,   43,   53,    0,
  397.     0,    0,    0,   51,    0,    0,    0,   44,    0,    0,
  398.     0,    0,    0,    0,    0,   45,   46,    0,   49,  212,
  399.    47,    0,   52,   48,    0,    0,   50,    0,    0,    0,
  400.     0,    0,    0,   53,    0,    0,    0,    0,   51,    0,
  401.     0,    0,    0,   50,    0,    0,    0,    3,    4,   39,
  402.    53,    0,    0,   49,    0,   51,    0,   52,  188,   40,
  403.    41,   42,   43,    0,    0,    0,    0,    0,    0,    0,
  404.    49,    0,   44,    0,   52,    0,    0,    0,    0,    0,
  405.    45,   46,    0,    0,    3,   47,   39,    0,   48,    0,
  406.     0,    0,    0,    0,    0,    0,    0,  120,  121,  122,
  407.     0,    0,    0,    0,    0,    0,    0,    0,    0,   44,
  408.     0,    0,    0,    0,    0,    0,    0,  123,  124,    3,
  409.     4,   39,   47,    0,    0,    0,    0,    0,    0,    0,
  410.   190,   40,   41,   42,   43,    0,    0,    0,    0,    0,
  411.     0,    0,    0,    0,   44,    0,    0,    0,    0,    0,
  412.     0,    0,   45,   46,    0,    0,    0,   47,    0,    0,
  413.    48,    0,    0,    3,    4,   39,    0,    0,    0,    0,
  414.     0,  161,    0,    0,    0,   40,   41,   42,   43,    0,
  415.     0,    0,    0,    0,    0,    0,    0,    0,   44,    0,
  416.     0,    0,    0,    0,    0,    0,   45,   46,  161,    0,
  417.     0,   47,    0,    0,   48,  161,  161,  161,    0,    0,
  418.     0,  161,    0,    0,    0,    3,    4,   39,    0,    0,
  419.     0,    0,    0,    0,    0,    0,    0,   40,   41,   42,
  420.    43,    0,    0,    0,    0,    0,  215,  216,    0,    0,
  421.    44,  161,    0,  161,  161,    0,    0,    0,   45,   46,
  422.     3,    4,   39,   47,    0,    0,   48,    0,    0,    0,
  423.     0,  281,   40,   41,   42,   43,    0,    3,    4,   39,
  424.     0,    0,    0,    0,    0,   44,    0,    0,    0,   40,
  425.    41,   42,   43,   45,   46,    0,    0,    0,   47,    0,
  426.     0,   48,   44,  161,    0,  161,  161,  161,    0,    0,
  427.    45,   46,    0,    0,    0,   47,    0,    0,   48,    0,
  428.     0,    0,    0,    0,    0,    3,    4,  161,    0,    5,
  429.     6,    7,    8,    9,   10,   11,   12,  161,    0,    0,
  430.     0,   13,   14,   15,  161,   16,   17,   18,   19,   20,
  431.     0,   21,   22,    0,    0,   23,   24,   25,    0,    0,
  432.    26,   27,    0,   28,   29,   30,    0,    0,  161,    0,
  433.     0,  161,    0,    0,    0,    0,    0,    0,    0,    0,
  434.     0,    0,    0,  161,  161,    0,    0,    0,    0,    0,
  435.     0,    0,    0,    0,    0,    0,    0,  161,    0,    0,
  436.     0,  161,    0,    0,  161,    0,    0,    0,  161,    0,
  437.     0,    0,    0,  161,    0,    0,    0,    0,  161,    0,
  438.     0,    0,    0,    0,    0,  161,    0,    0,  161,    0,
  439.     0,    0,    0,    0,  161,
  440. };
  441. short yycheck[] = {                                      10,
  442.     0,   27,    8,   38,   10,    2,   41,   38,   38,   15,
  443.     0,   53,    9,   40,    0,    2,   27,  282,   45,   25,
  444.    38,   27,    9,   41,   41,   38,   44,   44,   41,   38,
  445.   257,  258,   41,   60,   50,   51,   52,   64,    0,   35,
  446.     0,   43,   53,   45,   51,   52,   42,   33,  260,   35,
  447.    76,   37,   38,   61,   44,   41,   42,   43,   44,   45,
  448.    62,   47,   93,  105,  282,   76,  108,   38,  295,  257,
  449.    41,  113,  114,  263,   60,   61,   62,  103,   35,    0,
  450.   257,   41,   44,   40,   44,  127,  276,  260,   49,  124,
  451.    35,  257,  103,  124,  124,   40,    4,  108,  104,  110,
  452.   111,  112,  113,  114,   33,  116,  124,   93,  268,  125,
  453.   126,  124,   33,    0,   35,  124,   37,   38,  268,   14,
  454.    41,   42,   43,   44,   45,   20,   47,  143,  144,  145,
  455.    61,   60,   61,   62,   61,  146,  143,  268,  124,   60,
  456.    61,   62,  153,  150,  151,   91,   33,  153,  154,  175,
  457.    37,   38,   40,  124,   41,   42,   43,   44,   45,  290,
  458.    47,  203,  204,  294,  175,  296,  297,   40,  174,  175,
  459.    91,   33,   93,   60,   61,   62,  137,  138,  139,   87,
  460.    88,   43,   44,   45,  207,  208,   33,  198,   40,  200,
  461.   201,  202,  100,  257,   41,  237,   43,   35,   45,   61,
  462.   177,  178,   40,  124,   91,   33,   93,  115,   33,   40,
  463.    43,  222,   45,  239,   61,   43,   41,   45,   43,  261,
  464.    45,  232,   33,  230,  231,   41,  237,   43,  239,   45,
  465.    41,  258,   43,   61,   45,   40,   61,  124,  199,   40,
  466.    40,  247,  269,  270,  271,  272,  243,  268,   44,  210,
  467.    61,  212,  263,  214,   44,  266,  243,   41,  268,   43,
  468.   260,   45,  260,  290,  291,  173,  260,  278,  279,   49,
  469.   296,  298,  257,  299,  260,  268,   43,  263,   45,   61,
  470.   286,  292,  308,   44,    0,  296,   37,   61,  299,   61,
  471.   276,   42,  303,  268,  320,   40,   47,  308,  260,  285,
  472.   286,  263,  313,   41,  310,   43,   41,   45,   43,  320,
  473.    45,   41,  323,   43,  276,   45,   40,   33,  329,   35,
  474.    40,   37,   38,  285,  286,   41,   42,   43,   44,   45,
  475.    40,   47,  293,   41,   41,   43,   43,   45,   45,  260,
  476.    40,   40,  263,   38,   60,   61,   62,  124,   41,    0,
  477.    43,   40,   45,  268,  268,  276,   61,  137,  138,  139,
  478.    61,  141,  142,  282,  285,  286,   41,   61,  148,  149,
  479.    43,   44,   45,  260,   41,   41,  263,   93,   41,    0,
  480.    40,   40,   33,   40,   35,   40,   37,   38,   40,  276,
  481.    41,   42,   43,   44,   45,   40,   47,  268,  285,  286,
  482.    43,   44,   45,   43,   44,   45,  285,  268,  124,   60,
  483.    61,   62,   33,  268,   35,    0,   37,   38,   44,  199,
  484.    41,   42,   43,   44,   45,   41,   47,  257,  258,  268,
  485.   210,   44,  212,  268,  214,   43,   44,   45,  268,   60,
  486.    61,   62,   93,   43,   44,   45,   44,   41,   33,    0,
  487.    35,  268,   37,   38,  286,   44,   41,   42,   43,   44,
  488.    45,   41,   47,   41,    0,  295,  296,  297,   43,   44,
  489.    45,    0,   93,  124,  260,   60,   61,   62,   43,   44,
  490.    45,    0,   33,    0,   35,    0,    0,   38,    0,    0,
  491.    41,   42,   43,   44,   45,   43,   44,   45,   43,   44,
  492.    45,    0,  268,  124,   41,    9,  243,  153,   93,   60,
  493.    61,   62,  107,  293,  175,  325,   -1,   -1,   -1,   -1,
  494.    -1,   -1,   33,    0,   35,   -1,   -1,   38,   -1,   -1,
  495.    41,   42,   43,   44,   45,   -1,   -1,   -1,   -1,  124,
  496.    -1,   -1,   93,   -1,  260,   -1,   -1,  263,   -1,   60,
  497.    61,   62,   -1,   -1,   -1,   -1,   33,    0,   35,   -1,
  498.   276,   38,   -1,   -1,   41,   42,   43,   44,   45,  285,
  499.   286,   -1,   -1,  124,   -1,   -1,   -1,   -1,   -1,   -1,
  500.    -1,   -1,   93,   60,   61,   62,   -1,   -1,   -1,   -1,
  501.    33,   -1,   -1,   -1,   -1,   38,   -1,   -1,   41,   -1,
  502.    43,   44,   45,   -1,   -1,   -1,   -1,   -1,   -1,  260,
  503.    -1,   -1,  263,  124,   -1,   -1,   93,   60,   61,   62,
  504.    -1,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,   -1,
  505.    -1,   -1,   -1,   -1,  285,  286,   -1,   -1,   -1,  260,
  506.    -1,   -1,  263,   -1,    0,   -1,   -1,  124,   -1,   -1,
  507.    93,   -1,   -1,   -1,   -1,  276,   -1,   -1,   -1,   -1,
  508.    -1,   -1,   -1,   -1,  285,  286,   -1,   -1,   -1,   -1,
  509.    -1,   -1,   -1,   -1,   -1,  260,   -1,   33,  263,   -1,
  510.    -1,  124,   38,    0,   -1,   41,   -1,   43,   44,   45,
  511.    -1,  276,   -1,   -1,   -1,   -1,   -1,   -1,    0,   -1,
  512.   285,  286,   -1,   -1,   60,   61,   62,   -1,   -1,  260,
  513.    -1,   -1,  263,   -1,   -1,   -1,   33,    0,   -1,   -1,
  514.    -1,   38,   -1,   -1,   41,  276,   43,   44,   45,   -1,
  515.    -1,   -1,   -1,   -1,  285,  286,   38,   93,   -1,   41,
  516.    -1,   -1,   44,   60,   61,   62,   -1,   -1,   -1,  260,
  517.    33,    0,  263,   -1,   -1,   38,   -1,   -1,   41,   -1,
  518.    43,   44,   45,   -1,   -1,  276,   -1,   -1,  124,   -1,
  519.    -1,   -1,   -1,   -1,  285,  286,   93,   60,   61,   62,
  520.    -1,   -1,   -1,  260,   33,    0,  263,   -1,   -1,   38,
  521.    -1,   93,   41,   -1,   43,   44,   45,   -1,   -1,  276,
  522.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  124,  285,  286,
  523.    93,   60,   61,   62,   -1,   -1,   -1,  260,   33,   -1,
  524.   263,    0,  124,   38,   -1,    0,   41,   -1,   43,   44,
  525.    45,   -1,   -1,  276,   -1,   -1,   -1,   -1,   -1,   -1,
  526.    -1,  124,  285,  286,   93,   60,   61,   62,   -1,   -1,
  527.    -1,   -1,   -1,   -1,   33,    0,   -1,   -1,   33,   38,
  528.    -1,   -1,   41,   38,   -1,   44,   41,   -1,   -1,   44,
  529.    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   93,   -1,
  530.    -1,   60,   61,   62,   -1,   60,   61,   62,   33,   -1,
  531.    -1,   -1,   -1,   38,    0,   -1,   41,   -1,   -1,   44,
  532.    -1,   -1,   -1,   -1,  260,   -1,   -1,  263,   -1,  124,
  533.    -1,   -1,   -1,   -1,   93,   60,   61,   62,   93,   -1,
  534.   276,   -1,   -1,   -1,   -1,   -1,    0,   33,   -1,  285,
  535.   286,   -1,   38,   -1,   -1,   41,   -1,   -1,   44,   -1,
  536.    -1,   -1,   -1,  260,   -1,  124,  263,   -1,   93,  124,
  537.    -1,   -1,   -1,   -1,   60,   61,   62,   -1,  260,  276,
  538.    -1,  263,   -1,    0,   38,   -1,   -1,   41,  285,  286,
  539.    44,   -1,   -1,   -1,  276,   -1,   -1,  260,   -1,  124,
  540.   263,   -1,   -1,  285,  286,   -1,   -1,   93,   -1,   -1,
  541.    -1,   -1,   -1,  276,   -1,   -1,   33,    0,   -1,   -1,
  542.    -1,   38,  285,  286,   41,   -1,   -1,   44,   -1,   -1,
  543.    -1,  260,   -1,   -1,  263,   -1,   -1,   -1,  124,   93,
  544.    -1,   -1,   -1,   60,   61,   62,   -1,  276,   -1,   -1,
  545.    33,    0,   -1,   -1,   -1,   38,  285,  286,   41,    0,
  546.    -1,   44,   -1,   -1,   -1,  260,   -1,   -1,  263,   -1,
  547.   124,   -1,   -1,   -1,   -1,   -1,   93,   60,   61,   62,
  548.    -1,  276,   -1,   -1,   33,   -1,   -1,   -1,   -1,   38,
  549.   285,  286,   41,   -1,   -1,   44,    0,   38,   -1,   -1,
  550.    41,  260,   -1,   44,  263,  260,   -1,  124,  263,   -1,
  551.    93,   60,   61,   62,   -1,   -1,   -1,  276,   -1,   -1,
  552.    -1,  276,   -1,   -1,   -1,   -1,  285,  286,   -1,   33,
  553.   285,  286,    0,   -1,   38,  260,   -1,   41,  263,   -1,
  554.    44,  124,   -1,   -1,   93,   -1,   -1,   -1,   -1,   -1,
  555.    -1,  276,   93,   -1,   -1,   -1,   60,   61,   62,   -1,
  556.   285,  286,   -1,   -1,   -1,   33,   -1,   -1,   -1,   -1,
  557.    38,   -1,   -1,   41,  260,  124,   44,  263,   -1,   -1,
  558.    -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,   -1,   93,
  559.   276,   -1,   60,   61,   62,   -1,   33,   -1,   -1,  285,
  560.   286,   -1,   -1,   40,   -1,   -1,  260,   -1,   45,  263,
  561.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  562.   124,   -1,  276,   60,   -1,   93,   -1,   64,   -1,   -1,
  563.    -1,  285,  286,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  564.    33,   -1,   -1,  260,   -1,   -1,  263,   40,   -1,   -1,
  565.    -1,   -1,   45,   -1,   -1,   -1,  124,   -1,   -1,  276,
  566.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   60,  285,  286,
  567.    -1,   64,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,
  568.   263,   -1,   33,   -1,   -1,   -1,   -1,   -1,   -1,   40,
  569.    -1,   -1,   -1,  276,   45,   -1,   -1,   -1,   -1,   -1,
  570.    -1,   -1,  285,  286,   -1,   -1,   -1,   -1,   -1,   60,
  571.    -1,  260,   -1,   64,  263,   -1,   -1,   -1,   -1,  260,
  572.    -1,   -1,  263,   -1,   -1,   -1,   33,  276,   -1,   -1,
  573.    -1,   -1,   -1,   40,   -1,  276,  285,  286,   45,   -1,
  574.    -1,   -1,   -1,   33,  285,  286,   -1,   -1,   -1,   -1,
  575.    40,   -1,   -1,   60,   -1,   45,  260,   64,   -1,  263,
  576.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  577.    60,   -1,  276,   -1,   64,   -1,   -1,   -1,   33,   -1,
  578.    -1,  285,  286,   -1,   -1,   40,   -1,   -1,   -1,   -1,
  579.    45,   -1,  260,   -1,   -1,  263,   -1,   -1,   -1,   -1,
  580.    -1,   -1,   -1,   -1,   -1,   60,   -1,   -1,  276,   64,
  581.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  285,  286,   -1,
  582.   257,  258,  259,  260,   -1,   -1,   -1,   -1,   -1,   -1,
  583.    -1,  268,  269,  270,  271,  272,   -1,   -1,   -1,   -1,
  584.    -1,   -1,   -1,   33,   -1,  282,   -1,   -1,   -1,   -1,
  585.    40,   -1,   -1,  290,  291,   45,   -1,  294,  295,  296,
  586.   297,  298,   -1,   -1,  257,  258,  259,  260,   -1,   -1,
  587.    60,   -1,   -1,   -1,   64,  268,  269,  270,  271,  272,
  588.    33,   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,  282,
  589.    -1,   -1,   45,   -1,   -1,   -1,   -1,  290,  291,   -1,
  590.    -1,   -1,  295,  296,  297,  298,  257,  258,  259,  260,
  591.    -1,   64,   -1,   -1,   -1,   33,   -1,  268,  269,  270,
  592.   271,  272,   40,   -1,   -1,   -1,   -1,   45,   -1,   -1,
  593.    -1,  282,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,
  594.   291,   -1,   60,   -1,  295,   -1,   64,  298,   -1,   -1,
  595.   257,  258,  259,  260,   -1,   -1,   -1,   -1,   -1,   33,
  596.    -1,  268,  269,  270,  271,  272,   40,  257,  258,  259,
  597.    -1,   45,   -1,   -1,  264,  282,   -1,   -1,   -1,  269,
  598.   270,  271,  272,  290,  291,   -1,   60,   61,  295,   -1,
  599.    64,  298,  282,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  600.   290,  291,  257,  258,  259,  295,   -1,   -1,  298,   -1,
  601.    -1,   33,   -1,  268,  269,  270,  271,  272,   40,   -1,
  602.    -1,   -1,   -1,   45,   -1,   -1,   -1,  282,   -1,   -1,
  603.    -1,   -1,   -1,   -1,   -1,  290,  291,   -1,   60,   61,
  604.   295,   -1,   64,  298,   -1,   -1,   33,   -1,   -1,   -1,
  605.    -1,   -1,   -1,   40,   -1,   -1,   -1,   -1,   45,   -1,
  606.    -1,   -1,   -1,   33,   -1,   -1,   -1,  257,  258,  259,
  607.    40,   -1,   -1,   60,   -1,   45,   -1,   64,  268,  269,
  608.   270,  271,  272,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  609.    60,   -1,  282,   -1,   64,   -1,   -1,   -1,   -1,   -1,
  610.   290,  291,   -1,   -1,  257,  295,  259,   -1,  298,   -1,
  611.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  270,  271,  272,
  612.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  282,
  613.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  290,  291,  257,
  614.   258,  259,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  615.   268,  269,  270,  271,  272,   -1,   -1,   -1,   -1,   -1,
  616.    -1,   -1,   -1,   -1,  282,   -1,   -1,   -1,   -1,   -1,
  617.    -1,   -1,  290,  291,   -1,   -1,   -1,  295,   -1,   -1,
  618.   298,   -1,   -1,  257,  258,  259,   -1,   -1,   -1,   -1,
  619.    -1,   76,   -1,   -1,   -1,  269,  270,  271,  272,   -1,
  620.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  282,   -1,
  621.    -1,   -1,   -1,   -1,   -1,   -1,  290,  291,  103,   -1,
  622.    -1,  295,   -1,   -1,  298,  110,  111,  112,   -1,   -1,
  623.    -1,  116,   -1,   -1,   -1,  257,  258,  259,   -1,   -1,
  624.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  269,  270,  271,
  625.   272,   -1,   -1,   -1,   -1,   -1,  141,  142,   -1,   -1,
  626.   282,  146,   -1,  148,  149,   -1,   -1,   -1,  290,  291,
  627.   257,  258,  259,  295,   -1,   -1,  298,   -1,   -1,   -1,
  628.    -1,  268,  269,  270,  271,  272,   -1,  257,  258,  259,
  629.    -1,   -1,   -1,   -1,   -1,  282,   -1,   -1,   -1,  269,
  630.   270,  271,  272,  290,  291,   -1,   -1,   -1,  295,   -1,
  631.    -1,  298,  282,  198,   -1,  200,  201,  202,   -1,   -1,
  632.   290,  291,   -1,   -1,   -1,  295,   -1,   -1,  298,   -1,
  633.    -1,   -1,   -1,   -1,   -1,  257,  258,  222,   -1,  261,
  634.   262,  263,  264,  265,  266,  267,  268,  232,   -1,   -1,
  635.    -1,  273,  274,  275,  239,  277,  278,  279,  280,  281,
  636.    -1,  283,  284,   -1,   -1,  287,  288,  289,   -1,   -1,
  637.   292,  293,   -1,  295,  296,  297,   -1,   -1,  263,   -1,
  638.    -1,  266,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  639.    -1,   -1,   -1,  278,  279,   -1,   -1,   -1,   -1,   -1,
  640.    -1,   -1,   -1,   -1,   -1,   -1,   -1,  292,   -1,   -1,
  641.    -1,  296,   -1,   -1,  299,   -1,   -1,   -1,  303,   -1,
  642.    -1,   -1,   -1,  308,   -1,   -1,   -1,   -1,  313,   -1,
  643.    -1,   -1,   -1,   -1,   -1,  320,   -1,   -1,  323,   -1,
  644.    -1,   -1,   -1,   -1,  329,
  645. };
  646. #define YYFINAL 1
  647. #ifndef YYDEBUG
  648. #define YYDEBUG 0
  649. #endif
  650. #define YYMAXTOKEN 298
  651. #if YYDEBUG
  652. char *yyname[] = {
  653. "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  654. "'!'",0,"'#'",0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,
  655. 0,0,0,0,0,0,0,0,0,"'<'","'='","'>'",0,"'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  656. 0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  657. 0,0,0,0,0,"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  658. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  659. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  660. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Y_VAL","Y_VEC","Y_ABS","Y_STR","Y_END",
  661. "Y_REM","Y_GOTO","Y_TRACE","Y_LET","Y_PRINT","Y_LIST","Y_OBJ","Y_V0","Y_VX",
  662. "Y_VY","Y_VZ","Y_LOAD","Y_SAVE","Y_IF","Y_THEN","Y_CONT","Y_STOP","Y_GOSUB",
  663. "Y_RETURN","Y_DELETE","Y_NUM","Y_DIM","Y_FOR","Y_TO","Y_STEP","Y_NEXT","Y_NEW",
  664. "Y_RUN","Y_FKT","Y_RND","Y_FOPEN","Y_FPRINT","Y_PLANE","Y_BIT","Y_BOUND",
  665. "Y_TEX","Y_TRANSFORM",
  666. };
  667. char *yyrule[] = {
  668. "$accept : anw",
  669. "$$1 :",
  670. "anw : $$1 anwg",
  671. "anwg :",
  672. "anwg : Y_END",
  673. "anwg : Y_STOP",
  674. "anwg : Y_CONT",
  675. "anwg : Y_REM",
  676. "$$2 :",
  677. "anwg : Y_IF i_expr Y_THEN $$2 anwg",
  678. "anwg : Y_IF i_expr Y_GOTO Y_NUM",
  679. "anwg : Y_GOTO Y_NUM",
  680. "anwg : Y_RUN",
  681. "anwg : Y_RUN i_expr",
  682. "anwg : Y_GOSUB Y_NUM",
  683. "anwg : Y_RETURN",
  684. "anwg : Y_FOR Y_VAL '=' i_expr Y_TO i_expr f_step",
  685. "anwg : Y_NEXT Y_VAL",
  686. "anwg : Y_TRACE i_expr",
  687. "anwg : Y_NEW",
  688. "anwg : Y_LET asn_expr",
  689. "anwg : asn_expr",
  690. "anwg : Y_DIM Y_VAL dims",
  691. "anwg : Y_DIM Y_VEC dims",
  692. "anwg : Y_DIM Y_BIT Y_VAL dims",
  693. "anwg : Y_PRINT pr_exprs",
  694. "anwg : Y_FPRINT fp_exprs",
  695. "anwg : Y_LIST lst_expr",
  696. "anwg : Y_LOAD Y_STR",
  697. "anwg : Y_SAVE lst_expr Y_STR",
  698. "anwg : Y_SAVE Y_TRACE Y_STR",
  699. "anwg : Y_FOPEN",
  700. "anwg : Y_FOPEN Y_STR",
  701. "anwg : Y_DELETE lst_expr",
  702. "anwg : Y_DELETE Y_STR",
  703. "anwg : Y_DELETE Y_OBJ",
  704. "anwg : Y_DELETE Y_TEX Y_OBJ",
  705. "anwg : Y_DELETE Y_BOUND Y_OBJ",
  706. "anwg : Y_BOUND Y_OBJ",
  707. "f_step :",
  708. "f_step : Y_STEP i_expr",
  709. "asn_expr : y_val '=' i_expr",
  710. "asn_expr : Y_BIT Y_VAL dims '=' i_expr",
  711. "asn_expr : y_vec '=' v_expr",
  712. "asn_expr : Y_OBJ '=' Y_STR",
  713. "asn_expr : Y_OBJ '=' y_obj",
  714. "asn_expr : Y_OBJ '=' v_expr",
  715. "asn_expr : Y_TEX Y_OBJ '=' y_obj",
  716. "asn_expr : Y_BOUND Y_OBJ '=' y_obj",
  717. "pr_exprs : pr_expr",
  718. "pr_exprs : pr_expr ',' pr_exprs",
  719. "pr_expr : Y_STR",
  720. "pr_expr : i_expr",
  721. "pr_expr : v_expr",
  722. "pr_expr : Y_OBJ",
  723. "fp_exprs : fp_expr",
  724. "fp_exprs : fp_expr ',' fp_exprs",
  725. "fp_expr : Y_STR",
  726. "fp_expr : i_expr",
  727. "fp_expr : v_expr",
  728. "fp_expr : Y_OBJ",
  729. "lst_expr :",
  730. "lst_expr : i_expr",
  731. "lst_expr : i_expr ',' i_expr",
  732. "$$3 :",
  733. "dims : $$3 dimsz",
  734. "dimsz : dim",
  735. "dimsz : dim dimsz",
  736. "dim : '[' i_exprx ']'",
  737. "$$4 :",
  738. "obj_set : Y_OBJ ',' $$4 obj_sez",
  739. "obj_sez : s_obj",
  740. "obj_sez : s_obj ',' obj_sez",
  741. "s_obj : Y_OBJ",
  742. "i_expr : i_exprx",
  743. "v_expr : v_exprz",
  744. "i_exprx : i_expry",
  745. "i_exprx : i_exprx '&' '&' i_expry",
  746. "i_exprx : i_exprx '|' '|' i_expry",
  747. "i_expry : i_exprz",
  748. "i_expry : i_expry '<' i_exprz",
  749. "i_expry : i_expry '<' '=' i_exprz",
  750. "i_expry : i_expry '=' i_exprz",
  751. "i_expry : v_exprz '=' v_exprz",
  752. "i_expry : i_expry '>' i_exprz",
  753. "i_expry : i_expry '>' '=' i_exprz",
  754. "i_expry : i_expry '!' '=' i_exprz",
  755. "i_expry : v_exprz '!' '=' v_exprz",
  756. "i_exprz : i_term",
  757. "i_exprz : i_exprz '+' i_term",
  758. "i_exprz : i_exprz '-' i_term",
  759. "i_term : i_faktor",
  760. "i_term : i_term '*' i_faktor",
  761. "i_term : v_term '*' v_faktor",
  762. "i_term : i_term '/' i_faktor",
  763. "i_term : i_term '%' i_faktor",
  764. "i_faktor : '-' i_faktor",
  765. "i_faktor : '!' i_faktor",
  766. "i_faktor : '@' i_faktor",
  767. "i_faktor : '(' i_exprx ')'",
  768. "i_faktor : Y_ABS '(' i_exprx ')'",
  769. "i_faktor : Y_ABS '(' v_exprz ')'",
  770. "i_faktor : y_val",
  771. "i_faktor : Y_NUM",
  772. "i_faktor : Y_RND '(' i_exprx ')'",
  773. "i_faktor : Y_VX '(' v_exprz ')'",
  774. "i_faktor : Y_VY '(' v_exprz ')'",
  775. "i_faktor : Y_VZ '(' v_exprz ')'",
  776. "i_faktor : Y_FKT '(' i_exprx ')'",
  777. "i_faktor : Y_FKT '(' i_exprx ',' i_exprx ')'",
  778. "i_faktor : Y_BIT Y_VAL dims",
  779. "y_val : Y_VAL",
  780. "y_val : Y_VAL dims",
  781. "v_exprz : v_term",
  782. "v_exprz : v_exprz '+' v_term",
  783. "v_exprz : v_exprz '-' v_term",
  784. "v_term : v_faktor",
  785. "v_term : i_term '*' v_faktor",
  786. "v_term : v_term '#' v_faktor",
  787. "v_faktor : '(' v_exprz ')'",
  788. "v_faktor : '<' i_exprz ',' i_exprz ',' i_exprz '>'",
  789. "v_faktor : y_vec",
  790. "v_faktor : '-' v_faktor",
  791. "v_faktor : '@' v_faktor",
  792. "v_faktor : Y_RND '(' v_exprz ')'",
  793. "v_faktor : Y_V0",
  794. "v_faktor : Y_VX",
  795. "v_faktor : Y_VY",
  796. "v_faktor : Y_VZ",
  797. "v_faktor : Y_V0 '(' Y_OBJ ')'",
  798. "v_faktor : Y_VX '(' Y_OBJ ')'",
  799. "v_faktor : Y_VY '(' Y_OBJ ')'",
  800. "v_faktor : Y_VZ '(' Y_OBJ ')'",
  801. "v_faktor : Y_FKT '(' v_exprz ',' v_exprz ')'",
  802. "v_faktor : Y_TRANSFORM '#' '(' v_exprz ',' v_exprz ',' v_exprz ',' v_exprz ')'",
  803. "v_faktor : Y_TRANSFORM '(' v_exprz ',' v_exprz ',' v_exprz ',' v_exprz ')'",
  804. "y_vec : Y_VEC",
  805. "y_vec : Y_VEC dims",
  806. "y_obj : Y_OBJ",
  807. "y_obj : Y_TEX Y_OBJ",
  808. "y_obj : Y_BOUND Y_OBJ",
  809. "y_obj : Y_PLANE '(' v_expr ',' v_expr ')'",
  810. "y_obj : Y_PLANE '(' v_expr ',' v_expr ',' v_expr ')'",
  811. "y_obj : Y_FKT '(' Y_OBJ ',' v_expr ')'",
  812. "y_obj : Y_FKT '#' '(' Y_OBJ ',' v_expr ')'",
  813. "y_obj : Y_FKT '(' obj_set ')'",
  814. };
  815. #endif
  816. #define yyclearin (yychar=(-1))
  817. #define yyerrok (yyerrflag=0)
  818. #ifdef YYSTACKSIZE
  819. #ifndef YYMAXDEPTH
  820. #define YYMAXDEPTH YYSTACKSIZE
  821. #endif
  822. #else
  823. #ifdef YYMAXDEPTH
  824. #define YYSTACKSIZE YYMAXDEPTH
  825. #else
  826. #define YYSTACKSIZE 600
  827. #define YYMAXDEPTH 600
  828. #endif
  829. #endif
  830. int yydebug;
  831. int yynerrs;
  832. int yyerrflag;
  833. int yychar;
  834. short *yyssp;
  835. YYSTYPE *yyvsp;
  836. YYSTYPE yyval;
  837. YYSTYPE yylval;
  838. short yyss[YYSTACKSIZE];
  839. YYSTYPE yyvs[YYSTACKSIZE];
  840. #define yystacksize YYSTACKSIZE
  841. int yyerror(char *s)
  842. {
  843.  fprintf(stderr,"%s : %s\n",yysccsid,s);
  844.  if(errlog!=stderr) fprintf(errlog,"YACC : %s\n",s);
  845.  return(0);
  846. }
  847.  
  848. void mkfield(T_NODE *tt, DIM_H *dm, long n)
  849. {
  850.  DIM_H *dmp;
  851.  T_NODE *tn;
  852.  static char msg[]="DIM array";
  853.  int i; long l;
  854.  
  855.  sprintf(tmp_line,"[]%s",tt->s);
  856.  if((tn=t_symtable(tmp_line))==(T_NODE *)NULL) t_error(msg,-1);
  857.  tt->a=tn;
  858.  
  859.  if(tn->p!=(void *)NULL) free((dmp=(DIM_H *)(tn->p))->f); /* kill field */
  860.  else { tn->p=(void *)(dmp=(DIM_H *)malloc(sizeof(DIM_H)));
  861.     if(dmp==(DIM_H *)NULL) t_error("Dim",1); }
  862.  
  863.  tn->c=B_FLD; dmp->n=dm->n;
  864.  for(i=0;i<dmp->n;i++) dmp->d[i]=dm->d[i];
  865.  
  866. #ifdef __TURBOC__
  867.  dmp->f=(VEC)farmalloc((unsigned long)(n*sizeof(double)));
  868. #else
  869.  dmp->f=(VEC)malloc((unsigned long)(n*sizeof(double)));
  870. #endif
  871.  
  872.  
  873.  if(dmp->f==(VEC)NULL)
  874.    { sprintf(err_msg,"Field %s[%ld] too large.",tt->s,n);
  875.      t_error(err_msg,1); }
  876.  for(l=0L;l<n;l++) *(dmp->f+l)=0;
  877.  dmp->l=n;
  878.  return;
  879. }
  880.  
  881. double *get_field(int nn, T_NODE *tnode, DIM_H *dm)
  882. {
  883.  T_NODE *tn;
  884.  DIM_H *dmp;
  885.  int i; long n,shift;
  886.  
  887.  tn=tnode->a;
  888.  if(tn==(T_NODE *)NULL || (tn->c!=B_FLD))
  889.    { yyerror("not a field"); return(double *)NULL; }
  890.  if(tn->p==(void *)NULL)
  891.    { yyerror("field with unknown dimension"); return(double *)NULL; }
  892.  dmp=(DIM_H *)(tn->p);
  893.  
  894.  if(dm->n!=dmp->n)
  895.    { yyerror("wrong number of indices"); return(double *)NULL;  }
  896.  for(i=0,n=0L,shift=1L;i<dm->n;i++)
  897.    { if((dm->d[i] > dmp->d[i]) || (dm->d[i]<=0))
  898.        { yyerror("index out of range"); return(double *)NULL;  }
  899.      n+=(dm->d[i]-1)*shift;
  900.      shift*=dmp->d[i];
  901.    }
  902.  id1=(int)(n%(-nn*8));
  903.  if(nn>0) n*=nn; else n=n/(-nn*8);
  904.  if(n>=dmp->l)
  905.    { yyerror("field length mismatch"); return((double *)NULL); }
  906.  tnode->p=(void *)((dmp->f)+n);
  907.  return((VEC)(tnode->p));
  908. }
  909.  
  910. double rnd(double r)
  911. { return( r*(double)(rand()&0X7FFF)/0X8000L ); }
  912.  
  913.  
  914. POV_OBJ *plane(VECTOR b,VECTOR a)
  915. {
  916.   vec0(pv_obj.b); vecx(pv_obj.u); vecy(pv_obj.v); vecz(pv_obj.w);
  917.   sprintf(pv_line,"plane { <%G,%G,%G>, %G }",
  918.           a[0],a[1],a[2],dot(a,b)/vecabs(a));
  919.   pv_obj.c=0; pv_obj.s=pv_line;
  920.   pv_obj.tex=pv_obj.bound=(POV_OBJ *)NULL;
  921.   pv_obj.cnt=1;
  922.   return(&pv_obj);
  923. }
  924.  
  925. /* Copies p to pv_obj        */
  926. POV_OBJ *cp_tmp(POV_OBJ *p)
  927. {
  928.   pv_obj.c=p->c; pv_obj.s=p->s;
  929.   pv_obj.tex=p->tex; pv_obj.bound=p->bound;
  930.   pv_obj.cnt=1;
  931.   vecasn(pv_obj.b,p->b);
  932.   vecasn(pv_obj.u,p->u);
  933.   vecasn(pv_obj.v,p->v);
  934.   vecasn(pv_obj.w,p->w);
  935.   return(&pv_obj);
  936. }
  937.  
  938. double obj_rad(POV_OBJ *p)
  939. { double x,y,z;
  940.   x=vecabs(p->u);
  941.   y=vecabs(p->v);
  942.   z=vecabs(p->w);
  943.   return((x+y+z)/3);
  944. }
  945.  
  946. /* create right angle vector                                    */
  947. void vec90(VECTOR rr,VECTOR v)
  948. {
  949.  int i,k;
  950.  VECTOR r;
  951.  
  952.  for(i=0,k=0; i<3; i++) { r[i]= (v[i]==0) ? 1 : 0; k+=(v[i]==0); }
  953.  if(!k)
  954.    { for(i=0; i<3; i++) r[i]=1/v[i]; r[2]=-2*r[2]; }
  955.  norm(rr,r);
  956.  return;
  957. }
  958.  
  959.  
  960. POV_OBJ *ctds(POV_OBJ *p1, POV_OBJ *p2)
  961. { double dd,r1,r2,a,sa,r,s1,s2;
  962.   VECTOR v,v1,v2,vu,vv,vw,vb;
  963.  
  964.   vecsub(v,p2->b,p1->b);
  965.   r1=obj_rad(p1); r2=obj_rad(p2);
  966.   r=r1-r2;
  967.   if(r==0)
  968.     {
  969.      vecasn(v1,p1->b);
  970.      vecasn(v2,p2->b);
  971.      s1=r1; s2=r2;
  972.     }
  973.   else
  974.     {
  975.      a=vecabs(v);
  976.      if((a==0) || (a<=fabs(r))) return((POV_OBJ *)NULL);
  977.      sa=r/a;            /* sinus alpha */
  978.      dd=sqrt(1/(sa*sa)-1);
  979.  
  980.      /* first cone rad:    r1*sa*dd */
  981.      /* second cone rad:   r2*sa*dd */
  982.      /* first cone point:  $3->b+(v)*sa*r1 */
  983.      /* second cone point: $5->b+(v)*sa*r2 */
  984.  
  985.      norm(v,v);
  986.      s1=r1*sa;               s2=r2*sa;
  987.      vecscale(v1,s1,v);      vecscale(v2,s2,v);
  988.      vecadd(v1,v1,p1->b);    vecadd(v2,v2,p2->b);
  989.      s1*=dd;                 s2*=dd;
  990.      s1=fabs(s1);            s2=fabs(s2);
  991.     }
  992.  
  993.   dd= (s1>s2) ? s1 : s2;
  994.   sprintf(pv_line,"cone {<-1,0,0>,%G,<1,0,0>,%G }",s1/dd,s2/dd);
  995.   vecasn(vb,v1);
  996.   vecsub(vu,v2,v1);
  997.   vecscale(vu,0.5,vu);
  998.   vecadd(vb,vb,vu);
  999.   vec90(vv,vu);
  1000.   vecprod(vw,vv,vu);
  1001.   norm(vw,vw);
  1002.   vecscale(vv,dd,vv);
  1003.   vecscale(vw,dd,vw);
  1004.  
  1005.  
  1006. /*  vec0(vb); vecx(vu); vecy(vv); vecz(vw); *//* for debugging */
  1007.  
  1008.   vecasn(pv_obj.b,vb); vecasn(pv_obj.u,vu);
  1009.   vecasn(pv_obj.v,vv); vecasn(pv_obj.w,vw);
  1010.   pv_obj.c=(char)0; pv_obj.s=pv_line;
  1011.   pv_obj.tex=(p1->tex==(POV_OBJ *)NULL) ? p2->tex : p1->tex;
  1012.   pv_obj.bound=(POV_OBJ *)NULL;
  1013.   pv_obj.cnt=1;
  1014.   return(&pv_obj);
  1015. }
  1016. #define YYABORT goto yyabort
  1017. #define YYACCEPT goto yyaccept
  1018. #define YYERROR goto yyerrlab
  1019. int
  1020. yyparse()
  1021. {
  1022.     register int yym, yyn, yystate;
  1023. #if YYDEBUG
  1024.     register char *yys;
  1025.     extern char *getenv();
  1026.  
  1027.     if (yys = getenv("YYDEBUG"))
  1028.     {
  1029.         yyn = *yys;
  1030.         if (yyn >= '0' && yyn <= '9')
  1031.             yydebug = yyn - '0';
  1032.     }
  1033. #endif
  1034.  
  1035.     yynerrs = 0;
  1036.     yyerrflag = 0;
  1037.     yychar = (-1);
  1038.  
  1039.     yyssp = yyss;
  1040.     yyvsp = yyvs;
  1041.     *yyssp = yystate = 0;
  1042.  
  1043. yyloop:
  1044.     if (yyn = yydefred[yystate]) goto yyreduce;
  1045.     if (yychar < 0)
  1046.     {
  1047.         if ((yychar = yylex()) < 0) yychar = 0;
  1048. #if YYDEBUG
  1049.         if (yydebug)
  1050.         {
  1051.             yys = 0;
  1052.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1053.             if (!yys) yys = "illegal-symbol";
  1054.             printf("yydebug: state %d, reading %d (%s)\n", yystate,
  1055.                     yychar, yys);
  1056.         }
  1057. #endif
  1058.     }
  1059.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  1060.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1061.     {
  1062. #if YYDEBUG
  1063.         if (yydebug)
  1064.             printf("yydebug: state %d, shifting to state %d\n",
  1065.                     yystate, yytable[yyn]);
  1066. #endif
  1067.         if (yyssp >= yyss + yystacksize - 1)
  1068.         {
  1069.             goto yyoverflow;
  1070.         }
  1071.         *++yyssp = yystate = yytable[yyn];
  1072.         *++yyvsp = yylval;
  1073.         yychar = (-1);
  1074.         if (yyerrflag > 0)  --yyerrflag;
  1075.         goto yyloop;
  1076.     }
  1077.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  1078.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  1079.     {
  1080.         yyn = yytable[yyn];
  1081.         goto yyreduce;
  1082.     }
  1083.     if (yyerrflag) goto yyinrecovery;
  1084. #ifdef lint
  1085.     goto yynewerror;
  1086. #endif
  1087. yynewerror:
  1088.     yyerror("syntax error");
  1089. #ifdef lint
  1090.     goto yyerrlab;
  1091. #endif
  1092. yyerrlab:
  1093.     ++yynerrs;
  1094. yyinrecovery:
  1095.     if (yyerrflag < 3)
  1096.     {
  1097.         yyerrflag = 3;
  1098.         for (;;)
  1099.         {
  1100.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  1101.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  1102.             {
  1103. #if YYDEBUG
  1104.                 if (yydebug)
  1105.                     printf("yydebug: state %d, error recovery shifting\
  1106.  to state %d\n", *yyssp, yytable[yyn]);
  1107. #endif
  1108.                 if (yyssp >= yyss + yystacksize - 1)
  1109.                 {
  1110.                     goto yyoverflow;
  1111.                 }
  1112.                 *++yyssp = yystate = yytable[yyn];
  1113.                 *++yyvsp = yylval;
  1114.                 goto yyloop;
  1115.             }
  1116.             else
  1117.             {
  1118. #if YYDEBUG
  1119.                 if (yydebug)
  1120.                     printf("yydebug: error recovery discarding state %d\n",
  1121.                             *yyssp);
  1122. #endif
  1123.                 if (yyssp <= yyss) goto yyabort;
  1124.                 --yyssp;
  1125.                 --yyvsp;
  1126.             }
  1127.         }
  1128.     }
  1129.     else
  1130.     {
  1131.         if (yychar == 0) goto yyabort;
  1132. #if YYDEBUG
  1133.         if (yydebug)
  1134.         {
  1135.             yys = 0;
  1136.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1137.             if (!yys) yys = "illegal-symbol";
  1138.             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
  1139.                     yystate, yychar, yys);
  1140.         }
  1141. #endif
  1142.         yychar = (-1);
  1143.         goto yyloop;
  1144.     }
  1145. yyreduce:
  1146. #if YYDEBUG
  1147.     if (yydebug)
  1148.         printf("yydebug: state %d, reducing by rule %d (%s)\n",
  1149.                 yystate, yyn, yyrule[yyn]);
  1150. #endif
  1151.     yym = yylen[yyn];
  1152.     yyval = yyvsp[1-yym];
  1153.     switch (yyn)
  1154.     {
  1155. case 1:
  1156. { if(ybdebug && !transl_flag)
  1157.           {
  1158.            if(program_ctr>=0)
  1159.          fprintf(errlogz,"* %-6d ",program[program_ctr-1].n);
  1160.            else fprintf(errlogz,"* C      ");
  1161.            fprintf(errlogz,"%s\n",retransl_line(clines));
  1162.           }
  1163.       }
  1164. break;
  1165. case 2:
  1166. { if(!transl_flag)
  1167.           { if(ybdebug==1)
  1168.           {
  1169. #ifdef __TURBOC__
  1170.             fprintf(stderr,"* %ld Bytes free\n",coreleft());
  1171. #endif
  1172.             putc('*',stderr);
  1173.             gets(tmp_line);  /* TRAP */
  1174.             if(tmp_line[0] && (tmp_line[0]!='y') && (tmp_line[0]!='Y'))
  1175.               { if(program_ctr>=0) cont_line=program[program_ctr].n;
  1176.             program_ctr=-1; }
  1177.           }
  1178.         /* perform DOS-action */
  1179. #ifdef __MSDOS__
  1180.         if(break_en)  { putchar('\r'); }
  1181. #endif
  1182.         if(break_req)
  1183.           { break_req=0;
  1184.             if(program_ctr>=0) cont_line=program[program_ctr].n;
  1185.             if(program_ctr>=0)
  1186.               printf(".. break at line %d\n",cont_line);
  1187.             program_ctr=-1; }
  1188.       }}
  1189. break;
  1190. case 4:
  1191. { if(!transl_flag) program_ctr=-1; }
  1192. break;
  1193. case 5:
  1194. { if(!transl_flag)
  1195.              { if(program_ctr>=0) cont_line=program[program_ctr].n;
  1196.                if(program_ctr>=0)
  1197.              printf(".. stopped at line %d\n",cont_line);
  1198.                program_ctr=-1; }}
  1199. break;
  1200. case 6:
  1201. { if(!transl_flag)
  1202.              if(cont_line>=0) program_ctr=search_line(cont_line); }
  1203. break;
  1204. case 7:
  1205. { if(transl_flag)
  1206.           { do
  1207.           {
  1208.            lex=t_lex(NULL,LEX_RCHAR);
  1209.            cline[clinep++]=(char)(id1=lex->wert.n.i);
  1210.           }
  1211.         while((id1!='\n') && (lex->typ!=EOLX));
  1212.         clinep-=1;
  1213.         lex->typ=EOLN; t_lex(NULL,LEX_PUSH);
  1214.           }
  1215.         else for(;*(clines+clinep)!=(char)0;clinep++);
  1216.      }
  1217. break;
  1218. case 8:
  1219. { if(!transl_flag && !(yyvsp[-1].s))
  1220.           for(;*(clines+clinep)!=(char)0;clinep++); }
  1221. break;
  1222. case 10:
  1223. { if(!transl_flag && (yyvsp[-2].s))
  1224.           program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p))); }
  1225. break;
  1226. case 11:
  1227. { if(!transl_flag) program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p))); }
  1228. break;
  1229. case 12:
  1230. { if(!transl_flag)
  1231.                { gosub_ptr=0; program_ctr=0; }}
  1232. break;
  1233. case 13:
  1234. { if(!transl_flag)
  1235.                { gosub_ptr=0;
  1236.                  program_ctr=search_line((int)(yyvsp[0].s)); }}
  1237. break;
  1238. case 14:
  1239. { if(!transl_flag)
  1240.           { if(gosub_ptr>=MAX_LINES/10)
  1241.           t_error("Gosub stack overflow.",4);
  1242.         if(program_ctr>=0)
  1243.           gosub_stack[gosub_ptr++]=program[program_ctr].n;
  1244.         else
  1245.           gosub_stack[gosub_ptr++]=-1;
  1246.         program_ctr=search_line((int)(*(VEC)((yyvsp[0].t)->p)));
  1247.       }}
  1248. break;
  1249. case 15:
  1250. { if(!transl_flag)
  1251.         { if(gosub_ptr==0) { yyerror("return without gosub"); YYABORT; }
  1252.           i=gosub_stack[--gosub_ptr];
  1253.           program_ctr=search_line(i);
  1254.       }}
  1255. break;
  1256. case 16:
  1257. { if(transl_flag)
  1258.         {
  1259.           tn=(yyvsp[-5].t)->a;
  1260.           if(tn!=(T_NODE *)NULL)
  1261.             if(tn->c!=B_FOR)
  1262.               { yyerror("variable unsuitable for loop"); YYABORT; }
  1263.           sprintf(tmp_line,"?%s",(yyvsp[-5].t)->s);
  1264.           if((tn=t_symtable(tmp_line))==(T_NODE *)NULL)
  1265.             t_error("Problem with FOR-loop.",-1);
  1266.           if(tn->p==(void *)NULL)
  1267.             {
  1268.              if((tn->p=(void *)malloc(sizeof(FT_LOOP)))
  1269.             ==(void *)NULL) t_error("No memory for loop.",1);
  1270.              ft=(FT_LOOP *)(tn->p);
  1271.              ft->n=-1; ft->start=0;
  1272.              ft->step=1; ft->end=0;
  1273.              tn->c=B_FOR;
  1274.             }
  1275.          (yyvsp[-5].t)->a=tn;
  1276.         }
  1277.           else /* !transl_flag */
  1278.         { tn=(yyvsp[-5].t)->a;
  1279.           if((tn==(T_NODE *)NULL) || (tn->c!=B_FOR))
  1280.             t_error("Unknown loop, probably array",-1);
  1281.           ft=(FT_LOOP *)(tn->p);
  1282.           if(program_ctr>0) ft->n=program[program_ctr-1].n+1;
  1283.           else { yyerror("FOR outside program"); YYABORT; }
  1284.           ft->start=yyvsp[-3].s; ft->step=yyvsp[0].s; ft->end=yyvsp[-1].s;
  1285.           *(VEC)((yyvsp[-5].t)->p)=ft->start; }
  1286.         }
  1287. break;
  1288. case 17:
  1289. { if(!transl_flag)
  1290.           { tn=(yyvsp[0].t)->a;
  1291.         if((tn==(T_NODE *)NULL) || (tn->p==(void *)NULL)
  1292.                     || (tn->c!=B_FOR))
  1293.           { yyerror("NEXT without FOR"); YYABORT; }
  1294.         ft=(FT_LOOP *)(tn->p);
  1295.         if(*(VEC)((yyvsp[0].t)->p)+ft->step <= ft->end)
  1296.           { *(VEC)((yyvsp[0].t)->p)+=ft->step;
  1297.             program_ctr=search_line(ft->n); }
  1298.         if(ybdebug)
  1299.           fprintf(errlogz,"* loop   %G **\n",*(VEC)(yyvsp[0].t->p));
  1300.           }}
  1301. break;
  1302. case 18:
  1303. { if(!transl_flag) ybdebug=(yyvsp[0].s);
  1304.         switch(ybdebug)
  1305.           {
  1306.            case 1: errlogz=stderr; break;
  1307.            case 2: errlogz=errlog; break;
  1308.                case 3: errlogz=stderr; break;
  1309.           }
  1310.       }
  1311. break;
  1312. case 19:
  1313. { if(!transl_flag) { new(); program_ctr=-1; }}
  1314. break;
  1315. case 22:
  1316. { if(!transl_flag)
  1317.           {    for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
  1318.         if(n<=0) { yyerror("scalar field dimension <=0"); YYABORT; }
  1319.         if(ybdebug)
  1320.           fprintf(errlogz,"* s size %ld **\n",n);
  1321.         mkfield(yyvsp[-1].t,&dm,n);
  1322.       }}
  1323. break;
  1324. case 23:
  1325. { if(!transl_flag)
  1326.           {    for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
  1327.         n*=3;
  1328.         if(n<=0) { yyerror("vector field dimension <=0"); YYABORT; }
  1329.         if(ybdebug)
  1330.           fprintf(errlogz,"* v size %ld **\n",n);
  1331.         mkfield(yyvsp[-1].t,&dm,n);
  1332.       }}
  1333. break;
  1334. case 24:
  1335. { if(!transl_flag)
  1336.           {    for(i=0,n=1L;i<dm.n;i++) n*=dm.d[i];
  1337.         if(n<=0) { yyerror("bit field dimension <=0"); YYABORT; }
  1338.         n=(n-1)/(8*sizeof(double))+1;
  1339.         if(ybdebug)
  1340.           fprintf(errlogz,"* b size %ld*%d **\n",n,sizeof(double));
  1341.         mkfield(yyvsp[-1].t,&dm,n);
  1342.       }}
  1343. break;
  1344. case 25:
  1345. { if(!transl_flag) printf("\n"); }
  1346. break;
  1347. case 26:
  1348. { if(!transl_flag) fprintf(pvp,"\n"); }
  1349. break;
  1350. case 27:
  1351. { if(!transl_flag) {
  1352.             for(i=id1,n=0; (i<=id2) && (program[i].n>=0); i++,n++)
  1353.               { printf("%-6d# %s\n",program[i].n,
  1354.                   retransl_line(program[i].s));
  1355.                 if(n && !(n%20)) gets(tmp_line);
  1356.               }
  1357.             printf("\n");
  1358.            }}
  1359. break;
  1360. case 28:
  1361. { if(!transl_flag)
  1362.           { if(flev>=9) t_error("Maximum file depth reached.",4);
  1363.         if((fp[++flev]=fopen(((yyvsp[0].t)->s)+1,"r"))==NULL)
  1364.           { sprintf(err_msg,"can't open command file: %s",
  1365.                 ((yyvsp[0].t)->s)+1);
  1366.             yyerror(err_msg); flev-=1; YYABORT; }
  1367.         load_flag=1; }}
  1368. break;
  1369. case 29:
  1370. { if(!transl_flag)
  1371.           if(save_program(id1,id2,((yyvsp[0].t)->s)+1)==NULL)
  1372.         { sprintf(err_msg,"can't open save file: %s",((yyvsp[0].t)->s)+1);
  1373.           yyerror(err_msg); YYABORT; }
  1374.           }
  1375. break;
  1376. case 30:
  1377. { if(!transl_flag)
  1378.           { transl_flag=2;
  1379.         if(save_program(0,MAX_LINES,((yyvsp[0].t)->s)+1)==NULL)
  1380.           { sprintf(err_msg,"can't open save file: %s",((yyvsp[0].t)->s)+1);
  1381.             yyerror(err_msg); YYABORT; }
  1382.         transl_flag=0;
  1383.           }
  1384.           }
  1385. break;
  1386. case 31:
  1387. { if(!transl_flag)
  1388.              { if(pvp!=stdout) fclose(pvp);
  1389.                pvp=stdout;
  1390.          }}
  1391. break;
  1392. case 32:
  1393. { if(!transl_flag)
  1394.          { if(pvp!=stdout) fclose(pvp);
  1395.            if((pvp=fopen(((yyvsp[0].t)->s)+1,"a"))==NULL)
  1396.           { sprintf(err_msg,"can't open output file: %s",
  1397.                 ((yyvsp[0].t)->s)+1);
  1398.             yyerror(err_msg); YYABORT; }
  1399.      }}
  1400. break;
  1401. case 33:
  1402. { if(!transl_flag)
  1403.           for(i=id1; (i<=id2) && (program[id1].n>=0); i++)
  1404.          insert_line(program[id1].n, (char *)NULL); }
  1405. break;
  1406. case 34:
  1407. { if(!transl_flag)
  1408.          { if(pvp!=stdout) fclose(pvp);
  1409.            if((pvp=fopen(((yyvsp[0].t)->s)+1,"w"))==NULL)
  1410.           { sprintf(err_msg,"can't open output file: %s",
  1411.                 ((yyvsp[0].t)->s)+1);
  1412.             yyerror(err_msg); YYABORT; }
  1413.      }}
  1414. break;
  1415. case 35:
  1416. { if(!transl_flag)
  1417.           { free_obj(yyvsp[0].p);
  1418.         if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
  1419.           }}
  1420. break;
  1421. case 36:
  1422. { if(!transl_flag)
  1423.           { del_obj((yyvsp[0].p)->tex); (yyvsp[0].p)->tex=(POV_OBJ *)NULL;
  1424.         if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
  1425.           }}
  1426. break;
  1427. case 37:
  1428. { if(!transl_flag)
  1429.           { del_obj((yyvsp[0].p)->bound); (yyvsp[0].p)->bound=(POV_OBJ *)NULL;
  1430.         if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz);
  1431.           }}
  1432. break;
  1433. case 38:
  1434. { if(!transl_flag) {
  1435.           bound_obj(yyvsp[0].p); if(ybdebug) obj_deb(yyvsp[0].p,0,errlogz); }}
  1436. break;
  1437. case 39:
  1438. { yyval.s=1; }
  1439. break;
  1440. case 40:
  1441. { yyval.s=yyvsp[0].s; }
  1442. break;
  1443. case 41:
  1444. { if(!transl_flag) *(VEC)((yyvsp[-2].t)->p)=yyvsp[0].s; }
  1445. break;
  1446. case 42:
  1447. { if(!transl_flag)
  1448.           {
  1449.            dp=get_field(-sizeof(double),yyvsp[-3].t,&dm);
  1450.            if(dp==(VEC)NULL) YYABORT;
  1451.            id2=id1%(sizeof(int)*8); id1=id1/(sizeof(int)*8);
  1452.            i=*((int *)dp+id1);
  1453.            k=1; k=k<<id2; i=(yyvsp[0].s!=0) ? i|k : i&~k;
  1454.            *((int *)dp+id1)=i;
  1455.           }}
  1456. break;
  1457. case 43:
  1458. { if(!transl_flag)
  1459.           for(i=0; i<3; i++) *((VEC)((yyvsp[-2].t)->p)+i)=(yyvsp[0].v)[i]; }
  1460. break;
  1461. case 44:
  1462. { if(!transl_flag)
  1463.           { pv=yyvsp[-2].p;
  1464.         if((pv->c>0) && (pv->s!=(char *)NULL))
  1465.           for(ys=pv->s;*ys; ys+=5) del_obj(obj_all[get4hex(ys+1)]);
  1466.         pv->c=0;
  1467.         if(pv->s!=(char *)NULL) free(pv->s);
  1468.         pv->s=cp_str(((yyvsp[0].t)->s)+1);
  1469.         if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
  1470.           }}
  1471. break;
  1472. case 45:
  1473. { if(!transl_flag)
  1474.           { obj_asn(yyvsp[-2].p,yyvsp[0].p);
  1475.         if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
  1476.           }}
  1477. break;
  1478. case 46:
  1479. { if(!transl_flag) vecasn((yyvsp[-2].p)->b,yyvsp[0].v); }
  1480. break;
  1481. case 47:
  1482. { if (!transl_flag)
  1483.           { pv=(yyvsp[-2].p)->tex;
  1484.         if(pv!=(POV_OBJ *)NULL) { del_obj(pv); pv=(POV_OBJ *)NULL; }
  1485.         (yyvsp[-2].p)->tex=obj_asn(pv,yyvsp[0].p);
  1486.         if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
  1487.           }}
  1488. break;
  1489. case 48:
  1490. { if (!transl_flag)
  1491.           { pv=(yyvsp[-2].p)->bound;
  1492.         if(pv!=(POV_OBJ *)NULL) { del_obj(pv); pv=(POV_OBJ *)NULL; }
  1493.         (yyvsp[-2].p)->bound=obj_asn(pv,yyvsp[0].p);
  1494.         if(ybdebug) obj_deb(yyvsp[-2].p,0,errlogz);
  1495.           }}
  1496. break;
  1497. case 51:
  1498. { if(!transl_flag) printf("%s",((yyvsp[0].t)->s)+1); }
  1499. break;
  1500. case 52:
  1501. { if(!transl_flag) printf(" %G",yyvsp[0].s); }
  1502. break;
  1503. case 53:
  1504. { if(!transl_flag)
  1505.              printf(" <%G,%G,%G>",(yyvsp[0].v)[0],(yyvsp[0].v)[1],(yyvsp[0].v)[2]); }
  1506. break;
  1507. case 54:
  1508. { if(!transl_flag) print_obj(stdout,yyvsp[0].p); }
  1509. break;
  1510. case 57:
  1511. { if(!transl_flag) fprintf(pvp,"%s ",((yyvsp[0].t)->s)+1); }
  1512. break;
  1513. case 58:
  1514. { if(!transl_flag) fprintf(pvp," %G",yyvsp[0].s); }
  1515. break;
  1516. case 59:
  1517. { if(!transl_flag)
  1518.              fprintf(pvp," <%G,%G,%G>",(yyvsp[0].v)[0],(yyvsp[0].v)[1],(yyvsp[0].v)[2]); }
  1519. break;
  1520. case 60:
  1521. { if(!transl_flag) print_obj(pvp,yyvsp[0].p); }
  1522. break;
  1523. case 61:
  1524. { id1=0;id2=MAX_LINES; }
  1525. break;
  1526. case 62:
  1527. { id1=search_line((int)(yyvsp[0].s)); id2=MAX_LINES;}
  1528. break;
  1529. case 63:
  1530. { id1=search_line((int)(yyvsp[-2].s));
  1531.                   id2=search_line((int)(yyvsp[0].s)); }
  1532. break;
  1533. case 64:
  1534. { dm.n=0; }
  1535. break;
  1536. case 68:
  1537. { if(!transl_flag)
  1538.            { if(dm.n>=MAXDIM)
  1539.            { sprintf(err_msg,"More than %d dimensions.",MAXDIM);
  1540.              t_error(err_msg,4); }
  1541.          dm.d[dm.n++]=(long)yyvsp[-1].s;
  1542.          if(ybdebug)
  1543.            fprintf(errlogz,"* dim    [%d] **\n",dm.d[dm.n-1]);
  1544.        }}
  1545. break;
  1546. case 69:
  1547. { obj_lst[0]=yyvsp[-1].p; n_obj=1; }
  1548. break;
  1549. case 73:
  1550. { if(!transl_flag)
  1551.             { if(n_obj>=BSIZE) t_error("Too many objects",4);
  1552.               obj_lst[n_obj++]=yyvsp[0].p; }}
  1553. break;
  1554. case 74:
  1555. { yyval.s=yyvsp[0].s;
  1556.             if(ybdebug && !transl_flag)
  1557.               fprintf(errlogz,"* scalar %G **\n",yyval.s);
  1558.           }
  1559. break;
  1560. case 75:
  1561. { yyval.v[0]=yyvsp[0].v[0]; yyval.v[1]=yyvsp[0].v[1]; yyval.v[2]=yyvsp[0].v[2];
  1562.             if(ybdebug && !transl_flag)
  1563.               fprintf(errlogz,"* vector <%G,%G,%G> **\n",
  1564.               yyval.v[0],yyval.v[1],yyval.v[2]);
  1565.           }
  1566. break;
  1567. case 76:
  1568. { yyval.s=yyvsp[0].s; }
  1569. break;
  1570. case 77:
  1571. { yyval.s=((yyvsp[-3].s)&&(yyvsp[0].s)); }
  1572. break;
  1573. case 78:
  1574. { yyval.s=((yyvsp[-3].s)||(yyvsp[0].s)); }
  1575. break;
  1576. case 79:
  1577. { yyval.s=yyvsp[0].s; }
  1578. break;
  1579. case 80:
  1580. { yyval.s=((yyvsp[-2].s)< (yyvsp[0].s)); }
  1581. break;
  1582. case 81:
  1583. { yyval.s=((yyvsp[-3].s)<=(yyvsp[0].s)); }
  1584. break;
  1585. case 82:
  1586. { yyval.s=((yyvsp[-2].s)==(yyvsp[0].s)); }
  1587. break;
  1588. case 83:
  1589. { yyval.s=(((yyvsp[-2].v)[0]==(yyvsp[0].v)[0]) &&
  1590.                      ((yyvsp[-2].v)[1]==(yyvsp[0].v)[1]) &&
  1591.                      ((yyvsp[-2].v)[2]==(yyvsp[0].v)[2])); }
  1592. break;
  1593. case 84:
  1594. { yyval.s=((yyvsp[-2].s)> (yyvsp[0].s)); }
  1595. break;
  1596. case 85:
  1597. { yyval.s=((yyvsp[-3].s)>=(yyvsp[0].s)); }
  1598. break;
  1599. case 86:
  1600. { yyval.s=((yyvsp[-3].s)!=(yyvsp[0].s)); }
  1601. break;
  1602. case 87:
  1603. { yyval.s=(((yyvsp[-3].v)[0]!=(yyvsp[0].v)[0]) ||
  1604.                      ((yyvsp[-3].v)[1]!=(yyvsp[0].v)[1]) ||
  1605.                      ((yyvsp[-3].v)[2]!=(yyvsp[0].v)[2])); }
  1606. break;
  1607. case 88:
  1608. { yyval.s=yyvsp[0].s; }
  1609. break;
  1610. case 89:
  1611. { yyval.s=((yyvsp[-2].s)+ (yyvsp[0].s)); }
  1612. break;
  1613. case 90:
  1614. { yyval.s=((yyvsp[-2].s)- (yyvsp[0].s)); }
  1615. break;
  1616. case 91:
  1617. { yyval.s=yyvsp[0].s; }
  1618. break;
  1619. case 92:
  1620. { yyval.s=((yyvsp[-2].s)* (yyvsp[0].s)); }
  1621. break;
  1622. case 93:
  1623. { yyval.s=dot(yyvsp[-2].v,yyvsp[0].v); }
  1624. break;
  1625. case 94:
  1626. { if(transl_flag) yyval.s=0;
  1627.                      else if(yyvsp[0].s!=0)  yyval.s=((yyvsp[-2].s)/ (yyvsp[0].s));
  1628.                      else {
  1629.                        yyerror("division by zero");
  1630.                        YYABORT; }}
  1631. break;
  1632. case 95:
  1633. { yyval.s=fmod(yyvsp[-2].s,yyvsp[0].s); }
  1634. break;
  1635. case 96:
  1636. { yyval.s=-(yyvsp[0].s); }
  1637. break;
  1638. case 97:
  1639. { yyval.s=!(yyvsp[0].s); }
  1640. break;
  1641. case 98:
  1642. { yyval.s=(yyvsp[0].s)*M_PI/180; }
  1643. break;
  1644. case 99:
  1645. { yyval.s=yyvsp[-1].s; }
  1646. break;
  1647. case 100:
  1648. { yyval.s=fabs(yyvsp[-1].s); }
  1649. break;
  1650. case 101:
  1651. { yyval.s=vecabs(yyvsp[-1].v); }
  1652. break;
  1653. case 102:
  1654. { yyval.s=*(VEC)((yyvsp[0].t)->p); }
  1655. break;
  1656. case 103:
  1657. { yyval.s=*(VEC)((yyvsp[0].t)->p); }
  1658. break;
  1659. case 104:
  1660. { yyval.s=rnd(yyvsp[-1].s); }
  1661. break;
  1662. case 105:
  1663. { yyval.s=yyvsp[-1].v[0]; }
  1664. break;
  1665. case 106:
  1666. { yyval.s=yyvsp[-1].v[1]; }
  1667. break;
  1668. case 107:
  1669. { yyval.s=yyvsp[-1].v[2]; }
  1670. break;
  1671. case 108:
  1672. { if(!transl_flag) switch(fkt_id)
  1673.           { case SIN: yyval.s=sin(yyvsp[-1].s); break;
  1674.         case COS: yyval.s=cos(yyvsp[-1].s); break;
  1675.         case TAN:  dd=cos(yyvsp[-1].s);
  1676.                if(dd==0) goto math_err;
  1677.                yyval.s=sin(yyvsp[-1].s)/dd; break;
  1678.         case ASIN: if((yyvsp[-1].s>1) || (yyvsp[-1].s<-1)) goto math_err;
  1679.                yyval.s=asin(yyvsp[-1].s); break;
  1680.         case ACOS: if((yyvsp[-1].s>1) || (yyvsp[-1].s<-1)) goto math_err;
  1681.                yyval.s=acos(yyvsp[-1].s); break;
  1682.         case ATAN: if(2*fabs(yyvsp[-1].s)==M_PI/2) goto math_err;
  1683.                yyval.s=atan(yyvsp[-1].s); break;
  1684.         case EXP:  yyval.s=exp(yyvsp[-1].s); break;
  1685.         case LOG:  if(yyvsp[-1].s<=0) goto math_err;
  1686.                yyval.s=log(yyvsp[-1].s); break;
  1687.         case SQRT: if(yyvsp[-1].s<0) goto math_err;
  1688.                yyval.s=sqrt(yyvsp[-1].s); break;
  1689.         case SQR:  yyval.s=yyvsp[-1].s*yyvsp[-1].s; break;
  1690.         math_err: yyerror("math error"); YYABORT;
  1691.         default:  yyerror("wrong scalar->scalar function"); YYABORT;
  1692.           }
  1693.         else yyval.s=0; }
  1694. break;
  1695. case 109:
  1696. { if(!transl_flag) switch(fkt_id)
  1697.           { case POW: yyval.s=pow((yyvsp[-3].s),(yyvsp[-1].s)); break;
  1698.         default:  yyerror("wrong 2scalar->scalar function"); YYABORT;
  1699.           }
  1700.         else yyval.s=0;
  1701.       }
  1702. break;
  1703. case 110:
  1704. { if(!transl_flag)
  1705.           {
  1706.            dp=get_field(-sizeof(double),yyvsp[-1].t,&dm);
  1707.            if(dp==(VEC)NULL) YYABORT;
  1708.            i=*((int *)dp+id1/(sizeof(int)*8));
  1709.            yyval.s=(double)((i>>(id1%(sizeof(int)*8)))&1);
  1710.           }
  1711.         else yyval.s=0;
  1712.       }
  1713. break;
  1714. case 111:
  1715. { yyval.t=yyvsp[0].t; }
  1716. break;
  1717. case 112:
  1718. { if(!transl_flag)
  1719.           if(get_field(1,yyvsp[-1].t,&dm)==(VEC)NULL) YYABORT;
  1720.           yyval.t=yyvsp[-1].t; }
  1721. break;
  1722. case 113:
  1723. { vecasn(yyval.v,yyvsp[0].v); }
  1724. break;
  1725. case 114:
  1726. { vecadd(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
  1727. break;
  1728. case 115:
  1729. { vecsub(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
  1730. break;
  1731. case 116:
  1732. { vecasn(yyval.v,yyvsp[0].v); }
  1733. break;
  1734. case 117:
  1735. { vecmul(yyval.v,yyvsp[-2].s,yyvsp[0].v); }
  1736. break;
  1737. case 118:
  1738. { vecprod(yyval.v,yyvsp[-2].v,yyvsp[0].v); }
  1739. break;
  1740. case 119:
  1741. { vecasn(yyval.v,yyvsp[-1].v); }
  1742. break;
  1743. case 120:
  1744. { (yyval.v)[0]=yyvsp[-5].s; (yyval.v)[1]=yyvsp[-3].s; (yyval.v)[2]=yyvsp[-1].s; }
  1745. break;
  1746. case 121:
  1747. { for(i=0; i<3; i++) yyval.v[i]=*((VEC)((yyvsp[0].t)->p)+i); }
  1748. break;
  1749. case 122:
  1750. { vecneg(yyval.v,yyvsp[0].v); }
  1751. break;
  1752. case 123:
  1753. { vecscale(yyval.v,M_PI/180,yyvsp[0].v); }
  1754. break;
  1755. case 124:
  1756. { for(i=0;i<3;i++) yyval.v[i]=rnd((yyvsp[-1].v)[i]); }
  1757. break;
  1758. case 125:
  1759. { yyval.v[0]=0; yyval.v[1]=0; yyval.v[2]=0; }
  1760. break;
  1761. case 126:
  1762. { yyval.v[0]=1; yyval.v[1]=0; yyval.v[2]=0; }
  1763. break;
  1764. case 127:
  1765. { yyval.v[0]=0; yyval.v[1]=1; yyval.v[2]=0; }
  1766. break;
  1767. case 128:
  1768. { yyval.v[0]=0; yyval.v[1]=0; yyval.v[2]=1; }
  1769. break;
  1770. case 129:
  1771. { vecasn(yyval.v,yyvsp[-1].p->b); }
  1772. break;
  1773. case 130:
  1774. { vecasn(yyval.v,yyvsp[-1].p->u); }
  1775. break;
  1776. case 131:
  1777. { vecasn(yyval.v,yyvsp[-1].p->v); }
  1778. break;
  1779. case 132:
  1780. { vecasn(yyval.v,yyvsp[-1].p->w); }
  1781. break;
  1782. case 133:
  1783. { if(!transl_flag) switch(fkt_id)
  1784.           { case ROT: rotxyz(yyval.v,yyvsp[-3].v,yyvsp[-1].v); break;
  1785.         case SCA: scale(yyval.v,yyvsp[-3].v,yyvsp[-1].v); break;
  1786.         case PER: if((yyvsp[-3].v)[0]==0 && (yyvsp[-3].v)[1]==0 && (yyvsp[-3].v)[2]==0)
  1787.                 vecasn(yyval.v,yyvsp[-1].v);
  1788.               else
  1789.                 { dd=dist2(yyvsp[-3].v,yyvsp[-1].v); vecscale(yyval.v,dd,yyvsp[-3].v); }
  1790.               break;
  1791.         default:  yyerror("wrong vector->vector function"); YYABORT;
  1792.           }
  1793.         else yyval.v[0]=yyval.v[1]=yyval.v[2]=0;
  1794.       }
  1795. break;
  1796. case 134:
  1797. { if(!transl_flag) transformc(yyval.v,yyvsp[-7].v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v); }
  1798. break;
  1799. case 135:
  1800. { if(!transl_flag)
  1801.           { i=transformd(yyval.v,yyvsp[-7].v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v);
  1802.         if(!i) { yyerror("transformation impossible"); YYABORT; }
  1803.           }}
  1804. break;
  1805. case 136:
  1806. { yyval.t=yyvsp[0].t; }
  1807. break;
  1808. case 137:
  1809. { if(!transl_flag)
  1810.           if(get_field(3,yyvsp[-1].t,&dm)==(VEC)NULL) YYABORT;
  1811.           yyval.t=yyvsp[-1].t; }
  1812. break;
  1813. case 138:
  1814. { yyval.p=yyvsp[0].p; }
  1815. break;
  1816. case 139:
  1817. { if(!transl_flag)
  1818.           if((yyvsp[0].p)->tex!=(POV_OBJ *)NULL) yyval.p=(yyvsp[0].p)->tex;
  1819.           else { yyerror("Obj doesn't have a texture"); YYABORT; }
  1820.       }
  1821. break;
  1822. case 140:
  1823. { if(!transl_flag)
  1824.           if((yyvsp[0].p)->bound!=(POV_OBJ *)NULL) yyval.p=(yyvsp[0].p)->bound;
  1825.           else { yyerror("Obj doesn't have a bounding shape"); YYABORT; }
  1826.       }
  1827. break;
  1828. case 141:
  1829. { if(!transl_flag) yyval.p=plane(yyvsp[-3].v,yyvsp[-1].v); }
  1830. break;
  1831. case 142:
  1832. { if(!transl_flag)
  1833.         { mknormal(v,yyvsp[-5].v,yyvsp[-3].v,yyvsp[-1].v);
  1834.           yyval.p=plane(yyvsp[-5].v,v);
  1835.         }}
  1836. break;
  1837. case 143:
  1838. { if(!transl_flag)
  1839.           { pv=cp_tmp(yyvsp[-3].p);
  1840.         switch(fkt_id)
  1841.           { case SCALE:       yyval.p=yscale1(pv,yyvsp[-1].v);  break;
  1842.             case ROTATE:      yyval.p=yrot1(pv,yyvsp[-1].v);    break;
  1843.             case TRANSLATE:   yyval.p=ytransl1(pv,yyvsp[-1].v); break;
  1844.             default:  yyerror("wrong obj/vec->obj function");
  1845.                   YYABORT;
  1846.           }
  1847.           }
  1848.         else yyval.p=yyvsp[-3].p;
  1849.       }
  1850. break;
  1851. case 144:
  1852. { if(!transl_flag)
  1853.           { pv=cp_tmp(yyvsp[-3].p);
  1854.         switch(fkt_id)
  1855.           { case SCALE:       yyval.p=yscale2(pv,yyvsp[-1].v);  break;
  1856.             case ROTATE:      yyval.p=yrot2(pv,yyvsp[-1].v);    break;
  1857.             case TRANSLATE:   yyval.p=ytransl2(pv,yyvsp[-1].v); break;
  1858.             default:  yyerror("wrong obj/vec->obj function(#)");
  1859.                   YYABORT;
  1860.           }
  1861.           }
  1862.         else yyval.p=yyvsp[-3].p;
  1863.       }
  1864. break;
  1865. case 145:
  1866. { if(!transl_flag) switch(fkt_id)
  1867.           { case CTDS:
  1868.           if(n_obj<=2)
  1869.             { if((yyval.p=ctds(obj_lst[0],obj_lst[1]))==(POV_OBJ *)NULL)
  1870.             { yyerror("ctds(2): object contains object");
  1871.               YYABORT; }}
  1872.           else
  1873.             {
  1874.               for(i=0;i<n_obj-1;i++)
  1875.             { if((pv=ctds(obj_lst[i],obj_lst[i+1]))
  1876.                   ==(POV_OBJ *)NULL)
  1877.                 { yyerror("ctds(n): object contains object");
  1878.                   YYABORT; }
  1879.               obj_lst[i]=new_obj();
  1880.               if(strlen(pv->s)>=LSIZE-1)
  1881.                 t_error("Too much dots to connect.",4);
  1882.               obj_lst[i]->s=cp_str(pv->s);
  1883.               vecasn(obj_lst[i]->b,pv->b);
  1884.               vecasn(obj_lst[i]->u,pv->u);
  1885.               vecasn(obj_lst[i]->v,pv->v);
  1886.               vecasn(obj_lst[i]->w,pv->w);
  1887.             }
  1888.               n_obj-=1; k=1;
  1889.               goto la_csg0;
  1890.             }
  1891.           break;
  1892.         case UNION: k=1; goto la_csg0;
  1893.         case SECT:  k=2; goto la_csg0;
  1894.         case DIFF:  k=3; goto la_csg0;
  1895.         case ADDOBJ:
  1896.                 pv=obj_lst[0];
  1897.                 if(pv->c==0) { k=1; goto la_csg0; }
  1898.                 add_objz(pv);
  1899.                 /* pv will be copied !! */
  1900.                 k=pv->c;
  1901.                 cp_tmp(pv);
  1902.                 pv_obj.cnt=-1;  pv_obj.c=1;
  1903.                 pv_obj.s=cp_str(pv->s);
  1904.  
  1905.                 for(i=1;i<n_obj;i++)
  1906.                   add_obj(&pv_obj,obj_lst[i]);
  1907.                 goto la_csg1;
  1908.  
  1909.         la_csg0:    /* Adding to empty tmp object */
  1910.                 vec0(pv_obj.b);  vecx(pv_obj.u);
  1911.                 vecy(pv_obj.v);  vecz(pv_obj.w);
  1912.                 pv_obj.cnt=-1;    pv_obj.c=1;
  1913.                 pv_obj.s=(char *)NULL;
  1914.                 pv_obj.tex=(POV_OBJ *)NULL;
  1915.                 pv_obj.bound=(POV_OBJ *)NULL;
  1916.  
  1917.                 for(i=0;i<n_obj;i++)
  1918.                   add_obj(&pv_obj,obj_lst[i]);
  1919.  
  1920.         la_csg1:    if(pv_obj.s!=(char *)NULL)
  1921.                   { if(strlen(pv_obj.s)>=LSIZE-1)
  1922.                   t_error("Too much objects in CSG.",4);
  1923.                 strcpy(pv_line,pv_obj.s);
  1924.                 free(pv_obj.s);
  1925.                 pv_obj.s=pv_line;
  1926.                   }
  1927.                             pv_obj.c=k;
  1928.                 yyval.p=&pv_obj;
  1929.                 break;
  1930.  
  1931.         default:   yyerror("wrong obj_set->obj function");
  1932.                YYABORT;
  1933.           }
  1934.         else yyval.p=&pv_obj;
  1935.       }
  1936. break;
  1937.     }
  1938.     yyssp -= yym;
  1939.     yystate = *yyssp;
  1940.     yyvsp -= yym;
  1941.     yym = yylhs[yyn];
  1942.     if (yystate == 0 && yym == 0)
  1943.     {
  1944. #if YYDEBUG
  1945.         if (yydebug)
  1946.             printf("yydebug: after reduction, shifting from state 0 to\
  1947.  state %d\n", YYFINAL);
  1948. #endif
  1949.         yystate = YYFINAL;
  1950.         *++yyssp = YYFINAL;
  1951.         *++yyvsp = yyval;
  1952.         if (yychar < 0)
  1953.         {
  1954.             if ((yychar = yylex()) < 0) yychar = 0;
  1955. #if YYDEBUG
  1956.             if (yydebug)
  1957.             {
  1958.                 yys = 0;
  1959.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  1960.                 if (!yys) yys = "illegal-symbol";
  1961.                 printf("yydebug: state %d, reading %d (%s)\n",
  1962.                         YYFINAL, yychar, yys);
  1963.             }
  1964. #endif
  1965.         }
  1966.         if (yychar == 0) goto yyaccept;
  1967.         goto yyloop;
  1968.     }
  1969.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  1970.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  1971.         yystate = yytable[yyn];
  1972.     else
  1973.         yystate = yydgoto[yym];
  1974. #if YYDEBUG
  1975.     if (yydebug)
  1976.         printf("yydebug: after reduction, shifting from state %d \
  1977. to state %d\n", *yyssp, yystate);
  1978. #endif
  1979.     if (yyssp >= yyss + yystacksize - 1)
  1980.     {
  1981.         goto yyoverflow;
  1982.     }
  1983.     *++yyssp = yystate;
  1984.     *++yyvsp = yyval;
  1985.     goto yyloop;
  1986. yyoverflow:
  1987.     yyerror("yacc stack overflow");
  1988. yyabort:
  1989.     return (1);
  1990. yyaccept:
  1991.     return (0);
  1992. }
  1993.